-
Java位運(yùn)算符:Java的位運(yùn)算符是把數(shù)字看作二進(jìn)制來進(jìn)行計(jì)算的。
- 按位與(&):如果存在兩個(gè)二進(jìn)制位都為1,則該位結(jié)果為1,否則為0
- 按位或(|):只要一個(gè)為1,則為1,否則為0
- 按位異或(^):兩個(gè)二進(jìn)制位相異為1,否則為0
- 取反(~):對數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變0,把0變1
- 左移動(dòng)(<<):運(yùn)算數(shù)的各二進(jìn)制位全部向左移動(dòng)若干位,即乘以2的若干次方
- 右移動(dòng)(>>):運(yùn)算數(shù)的各二進(jìn)制位全部向右移動(dòng)若干位,即整除以2的若干次方
異或的數(shù)學(xué)規(guī)則
運(yùn)算律:x^x=0, x^0=x
交換律:x^y ^z =x^z ^y -
實(shí)際例子
int a = 60; #60的二進(jìn)制為 0011 1100 int b = 13; #13的二進(jìn)制為 0000 1101 int c = 0; a&b: #結(jié)果為 0000 1100 a|b: #結(jié)果為 0011 1101 a^b: #結(jié)果為 0011 0001 -a: #結(jié)果為 1100 0011 a<<3: #結(jié)果為 1111 0000 0 a>>3: #結(jié)果為 0000 0111 System.out.println("二進(jìn)制輸出:":+Integer.toBinaryString(a&b)); System.out.println("八進(jìn)制輸出:"+Integer.toOctalString(a)); System.out.println("十六進(jìn)制輸出:"+Integer.toHexString(a));
負(fù)數(shù)的二進(jìn)制表示
負(fù)數(shù)的二進(jìn)制表示形式在計(jì)算機(jī)中,是以其正值的補(bǔ)碼形式表示的。
- 原碼:一個(gè)整數(shù),按照絕對值大小轉(zhuǎn)換成的二進(jìn)制數(shù),稱為原碼。如:00000000 00000000 00000000 00000101 是 5的 原碼。
- 反碼:將二進(jìn)制數(shù)(原碼)按位取反(1變0,0變1),得到的新二進(jìn)制數(shù)稱為原二進(jìn)制數(shù)的反碼。如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
- 補(bǔ)碼:所得反碼加1。也就是說要得到一個(gè)數(shù)的補(bǔ)碼,先得到反碼再加1。
看看整數(shù)-1在計(jì)算機(jī)中如何表示。
- 先取1的原碼:00000000 00000000 00000000 00000001
- 得反碼:11111111 11111111 11111111 11111110
- 得補(bǔ)碼:11111111 11111111 11111111 11111111
可見-1在計(jì)算機(jī)里面用二進(jìn)制表達(dá)就是全1,16進(jìn)制為:0xffffffff,根據(jù)-1的補(bǔ)碼計(jì)算出實(shí)際十進(jìn)制表示為:0xffffffff - 2**32