1-1 Java基礎-位運算
什麼是位運算?
一個位元組=8位二進制1k=1024位元組1k=1024*8位二進制
位運算其實就是移位運算,将記憶體裡面的二進制進行移位比如二進制=101向右移1位 010|1移位之後的1其實已經不被計算在内了, 變成記憶體裡面的垃圾在java中,一個int數值類型有32位二進制1位是符号位,從2的0次方開始算起,數值的範圍為 $[-2^{32},2^{31}-1]$
Java的位運算
帶符号位的位運算
<<
左移就是向左移一位,比如101左移1位1011010 向後補0
>>
右移就是向右移一位1010101記住這是帶符号位的移位
無符号位運算
>>>
和
<<<
則是不帶符号位的位運算,比如1013(10進制的3)=101(二進制的101)在java中,配置設定了32位的記憶體給int,是以在java中的記憶體應該是這樣的:符号位0辨別正數,1辨別負數
0 0000 0000 0000 0000 0000 0000 0000 101
無符号左移1位
0 0000 0000 0000 0000 0000 0000 0000 010|1
再拿個負數來舉例子$-3$
1 0000 0000 0000 0000 0000 0000 0000 101
無符号左移1位
0 1000 0000 0000 0000 0000 0000 0000 010|1
最後負數$-3$變成了 $2^{30} + 2^{1}=2147483646$便于觀察我們可以将-3無符号左移31位
1 0000 0000 0000 0000 0000 0000 0000 101
無符号左移31位
0 0000 0000 0000 0000 0000 0000 0000 001 | 0000 0000 0000 0000 0000 0000 0000 101
就變成了1(10進制)
public class Random {
public static void main(String[] args) {
int j = -3;
int i = j >>> 31;
System.out.println(i);
}
}