溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【深入淺出-JVM】(2):原碼、反碼、補碼

發布時間:2020-06-18 17:20:37 來源:網絡 閱讀:242 作者:mousycoder 欄目:編程語言

計算機中有補碼表示 0

0 為正數
原碼 00000000 00000000 00000000 00000000
反碼 00000000 00000000 00000000 00000000 正數反碼等于原碼
補碼 00000000 00000000 00000000 00000000 正數補碼等于原碼

0 為負數
原碼 10000000 00000000 00000000 00000000
反碼 11111111 11111111 11111111 11111111 負數反碼等于原碼符號位不變,其余取反
補碼 00000000 00000000 00000000 00000000 負數補碼等于反碼+1

用補碼
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [0000 0000]補=[0000 0000]原
用反碼
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

數值 原碼 反碼 補碼
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000

補碼、原碼、反碼轉換

負數原碼轉補碼,最高位不變,其余取反,然后 +1
10000001
11111110
11111111
負數補碼轉原碼,最高位不變,其余取反,然后+1 補碼->反碼->原碼->反碼->補碼 ,(二進制數,先-1再取反和先取反后+1,結果一樣)
11111111
10000000
10000001

負數反碼轉原碼
符號位不變,其余取反
11111111
10000000

區別:

  1. 8位二進制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補碼表示的范圍為[-128, 127].
    補碼可以多表示一個范圍,其實是利用補碼 10000000 的原碼是 = -128
  2. 原碼最大的問題就是 一個數加上他的相反數不等于 0
  3. 已知補碼,求原碼的負數的補碼:符號位和數值位都取反,末位再加1

補碼

【深入淺出-JVM】(2):原碼、反碼、補碼

常用概念

  • 左移
    左移的規則只記住一點:丟棄最高位(符號位),0補最低位
  • 右移
    左邊空出的位用0或者1填補。正數用0填補,負數用1填補。注:不同的環境填補方式可能不同;
    低位右移溢出則舍棄該位。
  • 無符號右移
    左邊空出的位用0填補,低位右移溢出則舍棄該位。

感謝您的耐心閱讀,如果您發現文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,您的鼓勵是作者寫作最大的動力。

作 者 : @mousycoder

原文出處 : http://mousycoder.com/thinking-in-jvm/2/

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女