位運(yùn)算

最近寫了幾道位運(yùn)算的題目,順便復(fù)習(xí)一下位運(yùn)算的基本知識。

反碼:將二進(jìn)制的所有值取反,0變成1,1變成0
補(bǔ)碼:反碼加一

二進(jìn)制轉(zhuǎn)換
正常情況下,我們可以用Integer.toBinaryString()來獲取一個(gè)負(fù)數(shù)的二進(jìn)制字符串,但是將二進(jìn)制字符串轉(zhuǎn)換為Integer時(shí)Integer.valueOf("1010", 2)就只能轉(zhuǎn)正整數(shù),負(fù)數(shù)是無法轉(zhuǎn)換的。要想轉(zhuǎn)換二進(jìn)制為負(fù)數(shù),得用new BigInteger("二進(jìn)制字符串", 2).intValue();
我們都知道一個(gè)int有8個(gè)字節(jié),32位,但是最左邊的那個(gè)位置是用來表示正負(fù)符號的,也就是說Integer.MAX_VALUE所代表的值二進(jìn)制是:0111 1111 1111 1111 1111 1111 1111 1111而1111 1111 1111 1111 1111 1111 1111 1111代表的是-1。

位運(yùn)算
我們都知道移位運(yùn)算符有三個(gè):>> / << / >>> ;其中>>>叫做無符號右移,有什么區(qū)別?
Integer.toBinaryString(Integer.MAX_VALUE << 1);--> -2
正常情況下:左移右移的規(guī)則是左邊多的去掉,右邊多的也是去掉,右邊少的補(bǔ)0,負(fù)數(shù)左邊少了是補(bǔ)1,正數(shù)左邊少了是補(bǔ)0。所以有個(gè)無符號右移,為的就是這個(gè)。>>>無符號右移左邊缺了是不管正負(fù)數(shù)直接補(bǔ)0。

n &= n-1 會把n的二進(jìn)制最后一個(gè)1換成0,所以廣泛用于計(jì)算二進(jìn)制串有多少個(gè)1的算法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容