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