c語言sizeof用法 C語言中的位運算符是怎么取反的?
C語言中的位運算符是怎么取反的?A是整數(shù)類型,通常占4個字節(jié)2的原始代碼:0000 0000 0010求反:1111 1111 1111 1111 1111 1111 1111 1111 1111 1
C語言中的位運算符是怎么取反的?
A是整數(shù)類型,通常占4個字節(jié)
2的原始代碼:0000 0000 0010
求反:1111 1111 1111 1111 1111 1111 1111 1111 1111 1101
最高的位是1,所以它是一個負數(shù)。方法是
再次求反并加1(符號位不變)
求反:1000 0000 00010
加1 1000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 0000 0000 0000 0011
so-3
使用~位求反時,計算機將對操作數(shù)對應(yīng)的二進制表達式的每一位求反,求反后得到的值是~位求反的結(jié)果。例如,如果計算機是32位的,則下一步是計算~5的值,計算過程如下:5的二進制表達式是:1000000000000000101,執(zhí)行~operation,即在~5:111111111101010之后,即結(jié)果是-6。上面的過程沒有問題,但是如果你忘記了負數(shù)的二進制表達式,你會對這個結(jié)果產(chǎn)生懷疑,為什么111111111111111111101010代表-6,你可能會認為它應(yīng)該代表-10等等。因此,使用~位取反的另一個關(guān)鍵是理解111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111。擴展數(shù)據(jù)JS~的整數(shù)是位取反運算,~是雙取反運算。這里~~用于刪除小數(shù)部分。由于按位運算的運算值要求為整數(shù),且結(jié)果也是整數(shù),因此按位運算后的所有數(shù)據(jù)都會自動變?yōu)檎麛?shù)。除了~~n,您還可以使用n<<0n>>0n | 0