C 中負數的位操作

2021-07-11 05:13:39 字數 1470 閱讀 4611

這個**太簡單了:

#include

int main()

也就是0111與上1001即1111,也就是15

所以輸出:15

那麼問題來了,如果a或b要是有負數怎麼辦呢?

雖然這種情況很特殊,但是為了避免受虐,還是明明白白、了然於胸的更好。

先用程式看看:

#include

int main()

輸出結果為-7

我們改變一下b的值:

#include

int main()

輸出還是-5

那麼如果都是負數呢?

#include

int main()

輸出:-1

怎麼樣,蒙了沒有呢~

首先需要明確負數如何用二進位制表示

7的二進位制是 0111

-7的二進位制是多少呢?

在計算機中,負數以其正值的補碼形式表達。

原碼:乙個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。

比如 00000000 00000000 00000000 00000111 是 7的 原碼。

反碼:將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼。

取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

比如:將00000000 00000000 00000000 00000111每一位取反,得11111111 11111111 11111111 11111000。

補碼:反碼加1稱為補碼。

補碼為:

11111111 11111111 11111111 11111000 + 1 = 11111111 11111111 11111111 11111001

所以,-7 在計算機中表達為:11111111 11111111 11111111 11111001

而9的表示為: 00000000 00000000 00000000 00001001

所以 -7 | 9 = 11111111 11111111 11111111 11111001 = -7

如果此時b=2, 則b為: 00000000 00000000 00000000 00000010

那麼-7 | 2 = 11111111 11111111 11111111 11111011

看看原始碼為多少,減一取反,~(11111111 11111111 11111111 11111011 - 1) = 0…… 00000101 = 5

所以 7 | 2 = -5

為什麼是-5?

因為最高位是符號位,如果為0,正數,為1,負數

C 中的位操作

位操作符是對資料按二進位制位進行運算的操作符。c 位操作符包括 按位與 按位或 按位取反 左移 右移 舉例說明 using system class mikecat a 6的二進位制是00000110,3的二進位制是00000011,按位與後等於00000010,即2。int b 6 3 conso...

C 中的位操作

位操作符是對資料按二進位制位進行運算的操作符。c 位操作符包括 舉例說明 using system class mikecat a 6的二進位制是00000110,3的二進位制是00000011,按位與後等於00000010,即2。int b 6 3 console.writeline b b 6的...

C 中的位操作

位操作符是對資料按二進位制位進行運算的操作符。c 位操作符包括 舉例說明 using system class mikecat a 6的二進位制是00000110,3的二進位制是00000011,按位與後等於00000010,即2。int b 6 3 console.writeline b b 6的...