1. 程式人生 > >位運算------按位與、按位或、按位異或、取反、<<、>>、>>>

位運算------按位與、按位或、按位異或、取反、<<、>>、>>>

位或 進制數 如果 符號位 按位與 所有 不同 amp 十進制轉二進制

程序中的所有數在計算機內存中都是以二進制的形式儲存的,位運算就是直接對整數在內存中的二進制位進行操作。

知識點:

1、補碼:用於將十進制的負整數轉換為二進制數。十進制的正整數可以除以2取余,負整數則需要補碼。

補碼的流程:例如-10

  10:0000 0000 0000 1010

取反:1111 1111 1111 0101

+1

-10:1111 1111 1111 0110

2、負數在內存中以補碼存在。

一、按位與(&)

定義:如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0.

示例:

1、10與-10 &運算

10:0000 0000 0000 1010 -----> 十進制轉二進制

-10:1111 1111 1111 0110 -----> -10就是10取反,然後+1(補碼)

結果: 0000 0000 0000 0010 -----> 結果為2

二、按位或(|)

定義:如果兩個相應的二進制位有一個為1,則該結果為1,否則為0.

示例:

1、10與-10 |運算

10:0000 0000 0000 1010

-10:1111 1111 1111 0110

結果: 1111 1111 1111 1110 ----->結果-2

第一位為符號位,1代表是負數,因此是補碼形式存在,補碼-->十進制。先取反(符號位不變),+1。

1000 0000 0000 0001

+1

1000 0000 0000 0010 ------> -2

三、按位異或(^)

定義:如果兩個相應的二進制位值不同則為1,否則為0

示例:

1、10與-10 ^運算

10:0000 0000 0000 1010

-10:1111 1111 1111 0110

結果: 1111 1111 1111 1100 ------> 結果-4

四、取反(~)

定義:用來對一個二進制按位取反。

示例:

1、10取反

10:0000 0000 0000 1010

結果: 1111 1111 1111 0101 ------> 結果-11

五、左移(<<)

定義:將一個數的各二進制位全部左移N位,右補0

示例:

1、10左移<<2

10:0000 0000 0000 1010

結果: 0000 0000 0010 1000------> 結果40

六、右移(>>)

定義:將一個數的各二進制位全部右移N位,移到右邊的低位被舍棄,對於無符號數高位補0,負數高位補1.

1、10右移>>2

10:0000 0000 0000 1010

結果: 0000 0000 0000 0010------> 結果2

2、-10右移>>2

-10:1111 1111 1111 0110

結果: 1111 1111 1111 1101

取反,符號位不變

1000 0000 0000 0010

+1

1000 0000 0000 0011

結果:-3

七、>>>(無符號右移)

定義:將一個數的各二進制位全部右移N位,移到右邊的低位被舍棄,對於無符號數高位補0,只是對32位和64位的值有意義。

示例:

1、-10>>>2

-10:1111 1111 1111 1111 1111 1111 1111 0110 ------->由於>>>只對32和64位有意義,所以把-10定義成32位的

結果: 0011 1111 1111 1111 1111 1111 1111 1101

取反(符號位不變)

0100 0000 0000 0000 0000 0000 0000 0010

+1

0100 0000 0000 0000 0000 0000 0000 0011

位運算------按位與、按位或、按位異或、取反、<<、>>、>>>