正數(shù)反碼:與原碼相同
負(fù)數(shù)反碼:符號(hào)位為“1”涂屁,數(shù)值位按位 取反灰伟。
正數(shù)補(bǔ)碼:與原碼相同
負(fù)數(shù)補(bǔ)碼:求反加一
記住:
所有參與運(yùn)算的都是以補(bǔ)碼形式進(jìn)行的 結(jié)果也是補(bǔ)碼 因此也需要將補(bǔ)碼轉(zhuǎn)換成為原碼的形式存在
下面就以一個(gè)例子進(jìn)行講解:
負(fù)二 異或 三等于多少帖族?(-2 ^ 3) = 挡爵?
那么怎么轉(zhuǎn)換成位補(bǔ)碼呢?
1.如果是負(fù)數(shù)的情況茶鹃,那么將需要進(jìn)行轉(zhuǎn)換
負(fù)數(shù)的補(bǔ)碼:符號(hào)位為1艰亮,其余位為該數(shù)絕對(duì)值的原碼按位取反胞谭;然后再加1。
如:-2
源碼:1000 0000 0000 0010 (負(fù)數(shù),最高為是1)
反碼:1111 1111 1111 1101 (按位取反)
補(bǔ)碼:1111 1111 1111 1110 (加一)
2.如果是正數(shù)伶棒,那么原碼和補(bǔ)碼一樣
3的補(bǔ)碼:
0000 0000 0000 0011
所以-2^3 =
1111 1111 1111 1110
^ 0000 0000 0000 0011
= 1111 1111 1111 1101
因?yàn)榻Y(jié)果也是補(bǔ)碼,所以必須要轉(zhuǎn)換成為原碼
分為兩種情況:
1.如果最高為為1 即為負(fù)數(shù) 那么最高位不變 其他按位取反先蒋,
最后加一 和前邊補(bǔ)碼轉(zhuǎn)原碼是一樣的
2.最高為是0,不用轉(zhuǎn)化
===============此題的結(jié)果為:-3
其他的運(yùn)算都是類似的 注意:
所有參與運(yùn)算的都是以補(bǔ)碼形式進(jìn)行的結(jié)果也是補(bǔ)碼 因此也需要將補(bǔ)碼轉(zhuǎn)換成為原碼的形式存在
按位非(~)
我們直接進(jìn)入主題宛渐,查看~-5的運(yùn)算原理圖,從而得出按位非的運(yùn)算規(guī)律:
從圖不難看出业岁,原碼 --取反-> 反碼 --加1-> 補(bǔ)碼 --取反-> 按位非值
寇蚊;那如果是正數(shù)按位非呢,反推估計(jì)就行了的允耿!
得出的口訣就是(不知道對(duì)不對(duì)扒怖,也沒驗(yàn)證):數(shù)值(正數(shù)、負(fù)數(shù))加1取反盗痒;如-5按位非:-5 + 1為-4,取反為4掂墓;6按位非:6+1為7看成,取反為-7;
轉(zhuǎn)自:https://blog.csdn.net/qq506124204/article/details/7521996
https://blog.csdn.net/cyb_23/article/details/41863689