c語(yǔ)言取反指令 c語(yǔ)言里按位取反符號(hào)位會(huì)變嗎?
c語(yǔ)言里按位取反符號(hào)位會(huì)變嗎?按位求反運(yùn)算符~是對(duì)數(shù)字的存儲(chǔ)狀態(tài)(補(bǔ)碼)求反。包含符號(hào)位的正數(shù)的逆碼是其自身,負(fù)數(shù)的逆碼是除符號(hào)位以外的其他位。位求反運(yùn)算符~是一個(gè)反碼和一個(gè)位求反運(yùn)算符,有點(diǎn)不同a是
c語(yǔ)言里按位取反符號(hào)位會(huì)變嗎?
按位求反運(yùn)算符~是對(duì)數(shù)字的存儲(chǔ)狀態(tài)(補(bǔ)碼)求反。包含符號(hào)位的正數(shù)的逆碼是其自身,負(fù)數(shù)的逆碼是除符號(hào)位以外的其他位。位求反運(yùn)算符~是一個(gè)反碼和一個(gè)位求反運(yùn)算符,有點(diǎn)不同
a是int類(lèi)型,通常占4個(gè)字節(jié)
2的原始代碼:0000 0000 0010
求反運(yùn)算符:1111 1111 1111 1111 1111 1111 1111 1101
最高的位是1,所以它是一個(gè)負(fù)數(shù)。方法是通過(guò)
加1(符號(hào)位保持不變)
求反:1000 0000 0000 0010
加1 1000 0000 0000 0011
C語(yǔ)言中的位運(yùn)算符是怎么取反的?
當(dāng)使用~按位求反時(shí),計(jì)算機(jī)將對(duì)操作數(shù)對(duì)應(yīng)的二進(jìn)制表達(dá)式的每一位求反,求反后得到的值是~位求反的結(jié)果。例如,如果計(jì)算機(jī)是32位的,則下一步是計(jì)算~5的值,計(jì)算過(guò)程如下:5的二進(jìn)制表達(dá)式是:1000000000000000101,執(zhí)行~operation,即在~5:111111111101010之后,即結(jié)果是-6。上面的過(guò)程沒(méi)有問(wèn)題,但是如果你忘記了負(fù)數(shù)的二進(jìn)制表達(dá)式,你會(huì)對(duì)這個(gè)結(jié)果產(chǎn)生懷疑,為什么111111111111111111101010代表-6,你可能會(huì)認(rèn)為它應(yīng)該代表-10等等。因此,使用~位取反的另一個(gè)關(guān)鍵是理解111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111。擴(kuò)展數(shù)據(jù)JS~的整數(shù)是位求反運(yùn)算,~是兩次求反運(yùn)算。這里~~用于刪除小數(shù)部分。因?yàn)槲贿\(yùn)算的運(yùn)算值必須是整數(shù),而且結(jié)果也是整數(shù),所以位運(yùn)算會(huì)自動(dòng)變成整數(shù)。除了~~n,n<<0n>>0n | 0
I可以用作int類(lèi)型,它通常占用4字節(jié)的原始代碼0:0000 0000 negate:1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 111。獲取其原始數(shù)據(jù)的方法是再次求反并加1(符號(hào)位不變)求反:1000 0000 0000 0001,因此-1]Java使用補(bǔ)碼表示二進(jìn)制數(shù)。在補(bǔ)碼表示法中,最高位是符號(hào)位,正數(shù)的符號(hào)位是0,負(fù)數(shù)是1。補(bǔ)碼如下:對(duì)于正數(shù),最高位是0,其余表示值本身(用二進(jìn)制表示)。例如,42的補(bǔ)碼是00101010。對(duì)于負(fù)數(shù),將該數(shù)的絕對(duì)值的補(bǔ)碼逐位求逆,然后將1加到整數(shù)上,得到該數(shù)的補(bǔ)碼。例如,-42的補(bǔ)碼是11010110(00101010將11010101 1位取反,即11010110),0的補(bǔ)碼是唯一的,都是100000000。(在原碼和反碼的表示中,0和-0的表示不是唯一的,請(qǐng)參閱相應(yīng)的書(shū)籍)。此外,111111可用于表示-1的補(bǔ)碼(這也是補(bǔ)碼與原始碼和逆碼之間的差異)。
c語(yǔ)言中的位運(yùn)算符中‘按位取反’是怎么運(yùn)算的?
I是int類(lèi)型的原始代碼,它通常占用4個(gè)字節(jié)0:100000000000000000000取反:111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111