Java運(yùn)算符大致分為邏輯運(yùn)算符(&&,||,亲族!)、算數(shù)運(yùn)算符(+, -, *, / ,+=)可缚、位運(yùn)算符(^,|,&)霎迫、其他運(yùn)算符(三元運(yùn)算符)
不了解二進(jìn)制運(yùn)算的同學(xué)可以看我的另一篇有關(guān)于進(jìn)制運(yùn)算的 二進(jìn)制運(yùn)算
&(按位與)
&按位與的運(yùn)算規(guī)則是將兩邊的數(shù)轉(zhuǎn)換為二進(jìn)制位,然后運(yùn)算最終值帘靡,運(yùn)算規(guī)則即(兩個(gè)為真才為真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
3的二進(jìn)制位是0000 0011 知给, 5的二進(jìn)制位是0000 0101 , 那么就是011 & 101描姚,由按位與運(yùn)算規(guī)則得知涩赢,001 & 101等于0000 0001,最終值為1
7的二進(jìn)制位是0000 0111轩勘,那就是111 & 101等于101筒扒,也就是0000 0101,故值為5
&&(邏輯與)
&&邏輯與也稱為短路邏輯與绊寻,先運(yùn)算&&左邊的表達(dá)式花墩,一旦為假,后續(xù)不管多少表達(dá)式澄步,均不再計(jì)算冰蘑,一個(gè)為真,再計(jì)算右邊的表達(dá)式驮俗,兩個(gè)為真才為真懂缕。
|(按位或)
|按位或和&按位與計(jì)算方式都是轉(zhuǎn)換二進(jìn)制再計(jì)算,不同的是運(yùn)算規(guī)則(一個(gè)為真即為真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
6的二進(jìn)制位0000 0110 , 2的二進(jìn)制位0000 0010 , 110|010為110王凑,最終值0000 0110搪柑,故6|2等于6
||(邏輯或)
邏輯或||的運(yùn)算規(guī)則是一個(gè)為真即為真,后續(xù)不再計(jì)算索烹,一個(gè)為假再計(jì)算右邊的表達(dá)式工碾。
^(異或運(yùn)算符)
^異或運(yùn)算符顧名思義,異就是不同百姓,其運(yùn)算規(guī)則為1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
5的二進(jìn)制位是0000 0101 渊额, 9的二進(jìn)制位是0000 1001,也就是0101 ^ 1001,結(jié)果為1100 , 00001100的十進(jìn)制位是12
<<(左移運(yùn)算符)
5<<2的意思為5的二進(jìn)制位往左挪兩位垒拢,右邊補(bǔ)0旬迹,5的二進(jìn)制位是0000 0101 , 就是把有效值101往左挪兩位就是0001 0100 求类,正數(shù)左邊第一位補(bǔ)0奔垦,負(fù)數(shù)補(bǔ)1,等于乘于2的n次方尸疆,十進(jìn)制位是20
>>(右移運(yùn)算符)
凡位運(yùn)算符都是把值先轉(zhuǎn)換成二進(jìn)制再進(jìn)行后續(xù)的處理椿猎,5的二進(jìn)制位是0000 0101,右移兩位就是把101左移后為0000 0001寿弱,正數(shù)左邊第一位補(bǔ)0犯眠,負(fù)數(shù)補(bǔ)1,等于除于2的n次方症革,結(jié)果為1
~(取反運(yùn)算符)
取反就是1為0,0為1,5的二進(jìn)制位是0000 0101筐咧,取反后為1111 1010,值為-6
>>>(無符號(hào)右移運(yùn)算符)
無符號(hào)右移運(yùn)算符和右移運(yùn)算符的主要區(qū)別在于負(fù)數(shù)的計(jì)算噪矛,因?yàn)闊o符號(hào)右移是高位補(bǔ)0量蕊,移多少位補(bǔ)多少個(gè)0。
15的二進(jìn)制位是0000 1111 摩疑, 右移2位0000 0011危融,結(jié)果為3
-6的二進(jìn)制是6的二進(jìn)制取反再加1,6的二進(jìn)制也就是0000 0000 0000 0000 0000 0000 0000 0110,取反后加1為1111 1111 1111 1111 1111 1111 1111 1010雷袋,右移三位0001 1111 1111 1111 1111 1111 1111 1111
至于這個(gè)負(fù)數(shù)的無符號(hào)右移為什么是4個(gè)字節(jié)位的移動(dòng)吉殃,我也不太清楚,還望高手賜教楷怒,有所紕漏蛋勺,歡迎留言,謝謝鸠删。