理解Java移位操作

2021-08-27 19:41:12 字數 2241 閱讀 1718

1. 理解移位操作之前先要弄清楚什麼是原碼、反碼和補碼

所謂原碼就是二進位制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。

反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

原碼10010 -> 反碼11101 (10010,1為符號碼,故為負)

(11101) 二進位制= -2 十進位制

補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

例如:原碼

[+7]原= 0 0000111 b

[-7]原= 1 0000111 b

反碼[+7]反= 0 0000111 b

[-7]反= 1 1111000 b

補碼[+7]補= 0 0000111 b

[-7]補= 1 1111001 b

2. 移位運算子就是在二進位制的基礎上對數字進行平移。按照平移的方向和填充數字的規則分為三種:

<<(左移)、>>(帶符號右移)和》(無符號右移)。

在移位運算時,byte、short和char型別移位後的結果會變成int型別,對於byte、short、char和int進行移位時,規定實際移動的次數是

移動次數和32的餘數,也就是移位33次和移位1次得到的結果相同。移動long型的數值時,規定實際移動的次數是移動次數和64的餘數,

也就是移動66次和移動2次得到的結果相同。

三種移位運算子的移動規則和使用如下所示:

《運算規則:按二進位制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。

語法格式:

需要移位的數字 << 移位的次數

例如: 5<<1,則是將數字5左移1位

計算過程:

5<<1

首先把5轉換為二進位制數字0000 0000 0000 0000 0000 0000 0000 0101,然後把該數字高位(左側)的兩個零移出,其他的數字都朝左平移1位,

最後在低位(右側)的乙個空位補零。則得到的最終結果是0000 0000 0000 0000 0000 0000 0000 1010,則轉換為十進位制是10.數學意義:

在數字沒有溢位的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。

-5<<1 =-10

>>運算規則:按二進位制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1.

如果最高位是0,那麼左邊最高位就補0; 如果最高位是1,那麼左邊最高位就補1(負數要用補碼,正數補碼跟原碼一樣)  

語法格式:

需要移位的數字 >> 移位的次數

例如5>>2=1,則是將數字5右移2位

計算過程:5的二進位制形式為:0000 0000 0000 0000 0000 0000 0000 0101,然後把低位的最後兩個數字移出,因為該數字是正數,所以在

高位補零。則得到的最終結果是0000 0000 0000 0000 0000 0000 0000 0001.轉換為十進位制是1.

數學意義:右移一位相當於除2,右移n位相當於除以2的n次方(不能整除的用取整)。

例如-5>>2=-2 則是將數字-5右移2位   

計算過程:

-5的二進位制形式:1000 0000 0000 0000 0000 0000 0000 0101

轉換成補碼:1111 1111 1111 1111 1111 1111 1111 1011

移位高位補1:1111 1111 1111 1111 1111 1111 1111 1110

再轉換成原碼:1000 0000 0000 0000 0000 0000 0000 0010

得到結果-2

>>>運算規則:按二進位制形式把所有的數字向右移動對應位數,低位移出(捨棄),高位的空位補零。對於正數來說和帶符號右移相同,對於負數來說不同。

其他結構和》相似。

-5>>>2 = 2^30-2

原碼  1000 0000 0000 0000 0000 0000 0000 0101

反碼  

1111 1111 1111 1111 1111 1111 1111 1010

補碼  1111 1111 1111 1111 1111 1111 1111 1011

無符號右移兩位  0011 1111 1111 1111 1111 1111 1111 1110 +2-2

0100 0000 0000 0000 0000 0000 0000 0000 -2 = 2^30-2

5>>>2=1 和5>>2 相同 

Java 移位操作符

左移運算子,按照操作符右側指定的位數將操作符左邊的運算元向左移動 在低位補零 例如 num 1,相當於num乘以2 左移的規則只記住一點 丟棄最高位,0補最低位 運算規則 按二進位制的形式把所有數字向左移動對應的位數,高位移出 捨棄 高低位的空位補0.如果移動的位數超過了該型別的最大位數,編譯器會對...

java 移位運算

移位運算子就是在二進位制的基礎上對數字進行平移。按照平移的方向和填充數字的規則分為三種 左移 帶符號右移 和 無符號右移 在移位運算時,byte short和char型別移位後的結果會變成int型別,對於byte short char和int進行移位時,規定實際移動的次數是移動次數和32的餘數,也就...

Java中》和》移位操作符的區別

大家都知道 是比較兩個物件的大小,那 和 的區別呢?和 都是移位操作 對正數的移位操作它們的功能都是一樣的,如下 115 2 3 215 2 3 其實就是將15除於4,得到的商。轉換為二進位制可能更直觀 為了方便,下面的二進位制操作我們都是以八位進行的,而不是32位 100001111 2 0000...