位運(yùn)算的運(yùn)算規(guī)則 C語言中的位運(yùn)算符是怎么取反的?
C語言中的位運(yùn)算符是怎么取反的?A是整數(shù)類型,通常占4個(gè)字節(jié)2的原始代碼:0000 0000 0010求反:1111 1111 1111 1111 1111 1111 1111 1111 1111 1
C語言中的位運(yùn)算符是怎么取反的?
A是整數(shù)類型,通常占4個(gè)字節(jié)
2的原始代碼:0000 0000 0010
求反:1111 1111 1111 1111 1111 1111 1111 1111 1111 1101
最高的位是1,所以它是一個(gè)負(fù)數(shù)。方法是
再次求反并加1(符號(hào)位不變)
求反:1000 0000 00010
加1 1000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 0000 0000 0000 0011
so-3
使用~位求反時(shí),計(jì)算機(jī)將對(duì)操作數(shù)對(duì)應(yīng)的二進(jìn)制表達(dá)式的每一位求反,求反后得到的值是~位求反的結(jié)果。例如,如果計(jì)算機(jī)是32位的,則下一步是計(jì)算~5的值,計(jì)算過程如下:5的二進(jìn)制表達(dá)式是:1000000000000000101,執(zhí)行~operation,即在~5:111111111101010之后,即結(jié)果是-6。上面的過程沒有問題,但是如果你忘記了負(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)算后的數(shù)據(jù)會(huì)自動(dòng)變成整數(shù)。除了~~n,n<<0n>>0n | 0
之外,在特定情況下計(jì)算也很方便快捷,比如網(wǎng)絡(luò)地址的計(jì)算,ip1:0 192.168.0.11ip2:192.168.0.51mask:255.255.255.0數(shù)據(jù)分別用四個(gè)字節(jié)表示。當(dāng)您要計(jì)算子網(wǎng)地址時(shí),您可以使用“掩碼邏輯或IP”操作來獲得IP1和IP2屬于同一子網(wǎng)。當(dāng)您想計(jì)算這兩個(gè)地址本身時(shí),可以使用邏輯和運(yùn)算。如果用算術(shù)方法,速度慢,邏輯復(fù)雜,在單片機(jī)中,有些復(fù)雜的算術(shù)指令可能支持不太好,但位運(yùn)算是基本的邏輯運(yùn)算,99.9999%的芯片支持位運(yùn)算