Java功底篇系列-03-一些位元運算符你會如何理解?

來源:互聯網
上載者:User

標籤:java 位元運算符理解

話題一:異或

先看一段代碼吧:


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/71/6F/wKiom1XP6JbDX80rAABR6TGTePY135.jpg" title="搜狗_2015-08-16_09-34-05.png" alt="wKiom1XP6JbDX80rAABR6TGTePY135.jpg" />

這段代碼是用來實現a,b交換的。


異或是位元運算符,0^1為1,其他情況都是0,這是一個加法不進位的功能!


這有什麼用呢?


其實通過上面交換的例子,我們已經明白A^B^A將得到B,也就是可以實現資料還原的功能!



話題二:%與&

如果有一堆資料,我們想將這些資料通過HASH的方式,放入到桶中。


我們可以將桶進行編號,比如0號,1號,...N號桶。


給我們一個資料,我們要完成這個資料和桶的序號的映射轉化關係,這樣放入和尋找就可以了。


由於對於任何一個非負數A,進行A%B,得到的必然是[0,B-1]區間內,所以我們可以利用%的特性來完成這個轉化關係!


其實,&也可以完成這一過程!而且&是CPU層級的位元運算,會更快些!


要知道A&B,得到的一定是[0,B]區間內,真是神奇!


因為,&其實是一個置0的操作,比如A&B,也就是說將A的二進位中出現0的位置都反映到B對應的位置上,因此A&B是一個變小的過程!


但是,注意到比如B是10,對應二進位是1010,也就是說不論A是什麼,A&B得到的二進位的一號位,三號位必然是0【假設從右至左開始】。那麼A&B將取不到一些數,比如3,意味著3號桶將始終得不到資料!因此如果選擇&,那麼B的二進位一定要是連續的1,不能出現0位。



話題三:|

我們知道LINUX檔案的許可權可以分為rwx,也就是用三個二進位位就可以表達了,下面要求設計程式實現給定一個數字完成許可權的判斷。


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/71/6C/wKioL1XP-siQKTd1AAFPYMskMVA268.jpg" title="搜狗_2015-08-16_10-43-59.png" alt="wKioL1XP-siQKTd1AAFPYMskMVA268.jpg" />


在涉及到大量的判斷的時候,我們可以利用& | 這些位操作來達到目標!



話題四:>>>和<<


>>>是無符號的向右移動,也就是左邊空缺的補0。

而>> << 都是有符號的移動,空缺時補符號位的。


>>> >> << 這些都是操作二進位序列移動的,可是我們實際開發中用得到嗎?


我們知道,在網路上,發送都是位元組流,比如發送int a = 32;


一個int佔用4個位元組,比如從高到低:B1 B2 B3 B4


對於JAVA而言,將按照從高到低的順序進行發送;那麼顯然我們必須能夠將一個int分解成B1,B2, B3,B4;同時,在接收方必須知道如何將B1 B2 B3 B4組裝成原始的資料!


【不同語言可能發送的位元組順序不一樣,比如C/C++可能發送的就是從低到高】


看一段程式吧:


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/71/6F/wKioL1XQUuDDNToHAAHQmQ84foQ137.jpg" title="搜狗_2015-08-16_16-59-14.png" alt="wKioL1XQUuDDNToHAAHQmQ84foQ137.jpg" />


運行結果為:


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/71/6F/wKioL1XQUwKw686QAABz614RB3U260.jpg" title="搜狗_2015-08-16_16-59-48.png" alt="wKioL1XQUwKw686QAABz614RB3U260.jpg" />




本文出自 “努力奮鬥” 部落格,請務必保留此出處http://zhangfengzhe.blog.51cto.com/8855103/1685021

Java功底篇系列-03-一些位元運算符你會如何理解?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.