Java提供的位運(yùn)算符有:左移( << ),、右移( >> ) ,、無符號(hào)右移( >>> ) 、位與( & ) ,、位或( | ),、位非( ~ )、位異或( ^ ),,除了位非( ~ )是一元操作符外,,其它的都是二元操作符。 1,、左移( << ) Test1,、將5左移2位:
首先會(huì)將5轉(zhuǎn)為2進(jìn)制表示形式(java中,,整數(shù)默認(rèn)就是int類型,也就是32位): 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位補(bǔ)0: 0000 0000 0000 0000 0000 0000 0001 0100 換算成10進(jìn)制為20 2、右移( >> ) ,,右移同理,,只是方向不一樣罷了(感覺和沒說一樣)
0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位補(bǔ)0: 0000 0000 0000 0000 0000 0000 0000 0001
3,、無符號(hào)右移( >>> ) 我們知道在Java中int類型占32位,,可以表示一個(gè)正數(shù),也可以表示一個(gè)負(fù)數(shù),。正數(shù)換算成二進(jìn)制后的最高位為0,,負(fù)數(shù)的二進(jìn)制最高為為1 例如 -5換算成二進(jìn)制后為: 1111 1111 1111 1111 1111 1111 1111 1011 (剛開始接觸二進(jìn)制時(shí),不知道最高位是用來表示正負(fù)之分的,,當(dāng)時(shí)就總想不通,。。明明算起來得到的就是一個(gè)正數(shù)-_-)
我們分別對(duì)5進(jìn)行右移3位,、 -5進(jìn)行右移3位和無符號(hào)右移3位:
我們來看看它的移位過程(可以通過其結(jié)果換算成二進(jìn)制進(jìn)行對(duì)比): 5換算成二進(jìn)制: 0000 0000 0000 0000 0000 0000 0000 0101 5右移3位后結(jié)果為0,,0的二進(jìn)制為: 0000 0000 0000 0000 0000 0000 0000 0000 // (用0進(jìn)行補(bǔ)位) -5換算成二進(jìn)制: 1111 1111 1111 1111 1111 1111 1111 1011 -5右移3位后結(jié)果為-1,-1的二進(jìn)制為:
1111 1111 1111 1111 1111 1111 1111 1111 // (用1進(jìn)行補(bǔ)位) -5無符號(hào)右移3位后的結(jié)果 536870911 換算成二進(jìn)制: 0001 1111 1111 1111 1111 1111 1111 1111 // (用0進(jìn)行補(bǔ)位)
通過其結(jié)果轉(zhuǎn)換成二進(jìn)制后,,我們可以發(fā)現(xiàn),,正數(shù)右移,高位用0補(bǔ),,負(fù)數(shù)右移,高位用1補(bǔ),,當(dāng)負(fù)數(shù)使用無符號(hào)右移時(shí),,用0進(jìn)行部位(自然而然的,就由負(fù)數(shù)變成了正數(shù)了) 注意:筆者在這里說的是右移,,高位補(bǔ)位的情況,。正數(shù)或者負(fù)數(shù)左移,低位都是用0補(bǔ),。(自行測試)
4,、位與( & )
5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101 3轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0011 ------------------------------------------------------------------------------------- 1轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0001 位與:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位如果都是1,,那么結(jié)果的第n為也為1,,否則為0
5、位或( | )
5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101 3轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0011 ------------------------------------------------------------------------------------- 7轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0111 位或操作:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位 只要有一個(gè)是1,,那么結(jié)果的第n為也為1,,否則為0
6、位異或( ^ )
5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101 3轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0011 ------------------------------------------------------------------------------------- 6轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0110 位異或:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位 相反,,那么結(jié)果的第n為也為1,,否則為0
7、位非( ~ ) 位非是一元操作符
------------------------------------------------------------------------------------- -6轉(zhuǎn)換為二進(jìn)制:1111 1111 1111 1111 1111 1111 1111 1010 位非:操作數(shù)的第n位為1,那么結(jié)果的第n位為0,,反之,。
由位運(yùn)算操作符衍生而來的有: &= 按位與賦值 |= 按位或賦值 ^= 按位非賦值 >>= 右移賦值 >>>= 無符號(hào)右移賦值 <<= 賦值左移
和 += 一個(gè)概念而已。
舉個(gè)例子:
|
|