java運算符 與(&)劲装、非(~)胧沫、或(|)昌简、異或(^)

最近看HashMap源碼,遇到了這樣一段代碼:

    static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

先回想下如下知識:

1.十進制轉(zhuǎn)二進制

原理:給定的數(shù)循環(huán)除以2绒怨,直到商為0或者1為止纯赎。將每一步除的結(jié)果的余數(shù)記錄下來,然后反過來就得到相應的二進制了南蹂。

比如8轉(zhuǎn)二進制犬金,第一次除以2等于4(余數(shù)0),第二次除以2等于2(余數(shù)0)碎紊,第三次除以2等于1(余數(shù)0)佑附,最后余數(shù)1,得到的余數(shù)依次是0 0 0 1 仗考,

反過來就是1000音同,計算機內(nèi)部表示數(shù)的字節(jié)長度是固定的,比如8位秃嗜,16位权均,32位。所以在高位補齊锅锨,java中字節(jié)碼是8位的叽赊,所以高位補齊就是00001000.

寫法位(8)10=(00001000)2;

代碼實現(xiàn):

package sourceCode.hashMap;

public class mapHashCodeTest {
    public static void main(String[] args) {
        String str = toBinary(8);
        System.out.println(str);
    }

    static String toBinary(int num) {
        String str = "";
        while (num != 0) {
            str = num % 2 + str;
            num = num / 2;
        }
        return str;
    }

}

運行結(jié)果:1000

2.二進制轉(zhuǎn)十進制

計算也很簡單必搞,比如8的二進制表示位00001000必指,去掉補齊的高位就是1000.此時從個位開始計算2的冪(個位是0,依次往后推)乘以對應位數(shù)上的數(shù)恕洲,然后得到的值想加

于是有了塔橡,(2的0次冪)0+(2的1次冪)0+(2的2次冪)0+(2的3次冪)1 = 8

代碼實現(xiàn),直接調(diào)用Integer.parseInt("",2);

1 System.out.println(Integer.parseInt("1000",2));

運行結(jié)果:8

3.位異或運算(^)

運算規(guī)則是:兩個數(shù)轉(zhuǎn)為二進制霜第,然后從高位開始比較葛家,如果相同則為0,不相同則為1泌类。

比如:8^11.

8轉(zhuǎn)為二進制是1000癞谒,11轉(zhuǎn)為二進制是1011.從高位開始比較得到的是:0011.然后二進制轉(zhuǎn)為十進制,就是Integer.parseInt("0011",2)=3;

延伸:

4.位與運算符(&)

運算規(guī)則:兩個數(shù)都轉(zhuǎn)為二進制刃榨,然后從高位開始比較弹砚,如果兩個數(shù)都為1則為1,否則為0喇澡。

比如:129&128.

129轉(zhuǎn)換成二進制就是10000001迅栅,128轉(zhuǎn)換成二進制就是10000000。從高位開始比較得到晴玖,得到10000000读存,即128.

5.位或運算符(|)

運算規(guī)則:兩個數(shù)都轉(zhuǎn)為二進制为流,然后從高位開始比較,兩個數(shù)只要有一個為1則為1让簿,否則就為0敬察。

比如:129|128.

129轉(zhuǎn)換成二進制就是10000001,128轉(zhuǎn)換成二進制就是10000000尔当。從高位開始比較得到莲祸,得到10000001,即129.

6.位非運算符(~)

運算規(guī)則:如果位為0椭迎,結(jié)果是1锐帜,如果位為1,結(jié)果是0.

比如:~37

在Java中畜号,所有數(shù)據(jù)的表示方法都是以補碼的形式表示缴阎,如果沒有特殊說明,Java中的數(shù)據(jù)類型默認是int简软,int數(shù)據(jù)類型的占用四個字節(jié)蛮拔,一個字節(jié)是8位,就是32位

bit:位痹升,一個二進制數(shù)據(jù)0或1建炫,是1bit

byte:字節(jié),存儲空間的基本的單元疼蛾,1byte=8bit

一個英文占一個字節(jié)肛跌,1字母=1byte=8bit

一個中文占兩個字節(jié),1漢字=2byte=16bit

byte:一個字節(jié)(8位)(-128~127)(-2的7次方到2的7次方-1)

short:兩個字節(jié)(16位)(-32768~32767)(-2的15次方到2的15次方-1)

int:四個字節(jié)(32位)(一個字長)(-2147483648~2147483647)(-2的31次方到2的31次方-1)

long:八個字節(jié)(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)

float:四個字節(jié)(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方察郁,e-45是乘以10的 
負45次方)

double:八個字節(jié)(64位)(1.797693e+308~ 4.9000000e-324)

8轉(zhuǎn)為二進制是100101.

補碼后為: 00000000 00000000 00000000 00100101

取反為: 11111111 11111111 11111111 11011010

因為高位是1惋砂,所以原碼為負數(shù),負數(shù)的補碼是其絕對值的原碼取反绳锅,末尾再加1。

因此酝掩,我們可將這個二進制數(shù)的補碼進行還原: 首先鳞芙,末尾減1得反碼:11111111 11111111 11111111 11011001 其次,將各位取反得原碼:

00000000 00000000 00000000 00100110期虾,此時二進制轉(zhuǎn)原碼為38

所以~37 = -38.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末原朝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子镶苞,更是在濱河造成了極大的恐慌喳坠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茂蚓,死亡現(xiàn)場離奇詭異壕鹉,居然都是意外死亡剃幌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門晾浴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來负乡,“玉大人,你說我怎么就攤上這事脊凰《都” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵狸涌,是天一觀的道長切省。 經(jīng)常有香客問我,道長帕胆,這世上最難降的妖魔是什么朝捆? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮惶楼,結(jié)果婚禮上右蹦,老公的妹妹穿的比我還像新娘。我一直安慰自己歼捐,他們只是感情好何陆,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豹储,像睡著了一般贷盲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剥扣,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天巩剖,我揣著相機與錄音,去河邊找鬼钠怯。 笑死佳魔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的晦炊。 我是一名探鬼主播鞠鲜,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼断国!你這毒婦竟也來了贤姆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稳衬,失蹤者是張志新(化名)和其女友劉穎霞捡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄疚,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡碧信,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年赊琳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片音婶。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡慨畸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衣式,到底是詐尸還是另有隱情寸士,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布碴卧,位于F島的核電站弱卡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏住册。R本人自食惡果不足惜婶博,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荧飞。 院中可真熱鬧凡人,春花似錦、人聲如沸叹阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耳幢。三九已至岸晦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睛藻,已是汗流浹背启上。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留店印,地道東北人冈在。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像按摘,于是被迫代替她去往敵國和親讥邻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容