原码、反码、补码,以及负数的位操作
1、
原碼:將符號位數碼化了的數,其中“+”用0表示,“-”用1表示。
反碼:正數的反碼表示與原碼表示一樣;負數的反碼表示是原碼表示的符號位不變,數值位逐位取反。
補碼:正數的補碼表示與原碼表示一樣;負數的補碼表示是原碼表示的符號位不變,數值位逐位取反后最低位加1(反碼表示最低位加1)。
例:(假如以八位二進制表示)
[+63] ?原=0011 ?1111 ??????反=0011 ?1111 ????????補=0011 ?1111
[-63] ??原=1011 ?1111 ??????反=1100 ?0000 ????????補=1100 ?0001
2、負數的位操作(以與為例)
(1)計算機中,無論正數還是負數,都是以其補碼形式存儲的;
(2)如果位操作后的結果最高位為“1”,說明它是負數的補碼,轉化為實際的整數時要逆操作,即-1(減一)后保持最高位不變再取反。
(3)一個數(如b)的相反數(-b)的補碼,等于該數的補碼取反,然后加1。
比如:
-5 ?原碼=1000 0101 ? ? 反碼=1111 1010 ? ? 補碼=1111 1011
5 ? 原碼=0000 0101 ? ? 反碼=0000 0101 ? ?補碼=0000 0101?
可以進一步發現,-5 & 5 = 0000 0001,同理 -6 & 6 = 0000 0010,-7 & 7 =0000 0001……
這是一個很有用的性質,即返回(某個數的絕對值,如-6的絕對值是6)的(二進制表示的,6的二進制表示是0000 0110)從右往左第一個為1(第一位為1)的所表示的整數(0000 0010)。 ? ??
總結
以上是生活随笔為你收集整理的原码、反码、补码,以及负数的位操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符设备驱动基础篇1——简单的驱动源码分
- 下一篇: 托马斯微积分10版积分简表101 公式修