C語言位運算子詳解

2022-08-22 04:51:10 字數 3040 閱讀 5078

原碼:正數是其二進位制本身;負數是符號位為1,數值部分取x絕對值的二進位制

反碼:正數的反碼是其本身,對於負數其符號位不變其它各位取反(0變1,1變0)。

補碼:正數的補碼是其本身,負數的補碼是其反碼的基礎上+1。

正數的補碼、反碼都是其本身

要弄懂位運算子的計算方法,首先必須明白二進位制數在記憶體中的存放形式,二進位制數在記憶體中是以補碼的形式存放的。

參與運算的兩個值,轉換成2進製,如果兩個相應位均為1時,結果位才為1,否則為0.

例如:8&3,轉換成2進製:00001000(8的二進位制) & 00000011(3的二進位制) 00000000(結果為0)

7 & 3,轉換成2進製:00000111(7的二進位制) & 00000011(3的二進位制) 00000011(結果為3)

-7 & 3,轉換成2進製:1000 0111(-7的二進位制) & 0000 0011(3的二進位制),轉換成補碼形式1111 1001(-7的補碼) & 0000 0011(3的補碼), 結果為0000 0001(結果為1)

-7 & -3,轉換成2進製:1000 0111(-7的二進位制) & 1000 0011(-3的二進位制),轉換成補碼形式1111 1001(-7的補碼) & 1111 1101(-3的補碼), 結果為1111 1001 這是補碼還要轉換成原碼,轉換後為 1000 0111(結果為-7)

參與運算的兩個值,轉換成二進位制,如果兩個數的相應位有1,結果位就為1。

例如:8&3,轉換成2進製:00001000(8的二進位制) | 00000011(3的二進位制) 00001011(結果為11)

7 & 3,轉換成2進製:00000111(7的二進位制) | 00000011(3的二進位制) 00000111(結果為7)

-7 & 3,轉換成2進製:1000 0111(-7的二進位制) | 0000 0011(3的二進位制),轉換成補碼形式1111 1001(-7的補碼) | 0000 0011(3的補碼), 結果為1111 1011這是補碼,轉換成原碼為1000 0101(結果為-5)

-7 & -3,轉換成2進製:1000 0111(-7的二進位制) | 1000 0011(-3的二進位制),轉換成補碼形式1111 1001(-7的補碼) | 1111 1101(-3的補碼), 結果為1111 1101這是補碼,轉換成原碼為1000 0011(結果為-3)

參與運算的兩個值,轉換成二進位制,如果兩個數的相應為相同,為0,否則為1.

例如:8&3,轉換成2進製:00001000(8的二進位制) ^ 00000011(3的二進位制) 00001011(結果為11)

7 & 3,轉換成2進製:00000111(7的二進位制) ^ 00000011(3的二進位制) 00000100(結果為4)

-7 & 3,轉換成2進製:1000 0111(-7的二進位制) ^ 0000 0011(3的二進位制),轉換成補碼形式1111 1001(-7的補碼) ^ 0000 0011(3的補碼), 結果為1111 1010這是補碼,轉換成原碼為1000 0110(結果為-6)

-7 & -3,轉換成2進製:1000 0111(-7的二進位制) ^ 1000 0011(-3的二進位制),轉換成補碼形式1111 1001(-7的補碼) ^ 1111 1101(-3的補碼), 計算結果為0000 0100,十進位制為 4

取反運算子~為單目運算子,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。

例如:~7,轉換成2進製:0000 0111(7的二進位制)[原],求補碼0000 0111 [補],對補碼取反,包括符號位1111 1000,最後補碼轉原碼1111 0111 [反碼],1000 1000 [原碼]

計算步驟:

先對正數求補碼

然後對補碼取反,包括符號位

最後進行乙個補碼求原碼的過程

快速計算小技巧:

所有正整數的按位取反是其本身+1的負數

所有負整數的按位取反是其本身+1的絕對值

零的按位取反是 -1(0在數學界既不是正數也不是負數)

左移運算子和右移運算子都是雙目運算子。

左移運算:其功能是將運算子『<<』左邊的運算元的各二進位制位全部左移指定的位數。左移時,運算元移出左邊界的位被遮蔽,從右邊開始用0填補空位,其表示式的一般形式為:(運算元) << (移位位數)

例如:13 << 3, 將運算元轉換成二進位制0000 1101,左移3位0110 1000,十進位制就是104。

15<<2, 將運算元轉換成二進位制0000 1111,左移2位0011 1100,十進位制就是60。

計算技巧: (運算元) x 2移位位數 ,例如:13 x 23 = 104, 15 x 22 =60。

右移運算:其功能是將運算子『>>』 左邊的運算元的各二進位制位全部右移指定的位數。

右移時,運算元移出右邊的位被遮蔽,從左邊開始用符號位填補空位。如果原先最高位是1,則填補1;如果是0,則填補0,其表示式的一般形式為:(運算元) >> (移位位數)

例如:16 >> 3, 將運算元轉換成二進位制0001 0000,右移3位0000 0010,十進位制就是2。

15>>2, 將運算元轉換成二進位制0000 1111,右移2位0000 0011,十進位制就是3。

-15>>2, 將運算元轉換成二進位制1000 1111,轉換成補碼1111 0001,右移2位1111 1100,轉換成原碼1000 0100十進位制就是-4。

C語言位運算子

一.c語言位運算子簡介 c語言的位運算子有六種,分別是 右移運算子 左移運算子 按位與運算子 按位或運算子 按位異或運算子 按位取反運算子 這些運算子都是對於基本資料型別的二進位制位進行操作的,這裡我們只討論整型資料型別的位運算 二.各個運算子的具體使用 右移運算子 將整數的二進位制形式整體向右移動...

C語言 位運算子

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 1 按位與 運算子 按位與是指 參加運算的兩個資料,按二進位制位進行...

C語言 位運算子

位操作符,主要包括 與,或 符 取反符 移位符 異或符 開始前先看一段實現二進位制輸出的 方便觀察位操作 參考鏈結知乎作者 碼農愛學習 void printf bin int num printf 每8位加個空格,方便檢視 printf r n 與0清0,與1不變 功能1 提取位資料 功能2 清除 ...