天天看點

Java基礎-位運算

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);
    }
}