Java位運(yùn)算

全篇的精華在于:** x<<y 相當(dāng)于 x*2y眶蕉;x>>y相當(dāng)于x/2y **。
哈哈唧躲,如果想繼續(xù)了解就往下閱讀吧希望可以幫到你

本文轉(zhuǎn)載于CSDN博客造挽,想關(guān)注原文的請(qǐng)點(diǎn)這里,謝謝原作者弄痹!

1.表示方法:
在Java語言中饭入,二進(jìn)制數(shù)使用補(bǔ)碼表示,最高位為符號(hào)位肛真,正數(shù)的符號(hào)位為0谐丢,負(fù)數(shù)為1。補(bǔ)碼的表示需要滿足如下要求蚓让。  
(1)正數(shù)的最高位為0乾忱,其余各位代表數(shù)值本身(二進(jìn)制數(shù))。  
(2)對(duì)于負(fù)數(shù)历极,通過對(duì)該數(shù)絕對(duì)值的補(bǔ)碼按位取反窄瘟,再對(duì)整個(gè)數(shù)加1。
2.位運(yùn)算符  
位運(yùn)算表達(dá)式由操作數(shù)和位運(yùn)算符組成趟卸,實(shí)現(xiàn)對(duì)整數(shù)類型的二進(jìn)制數(shù)進(jìn)行位運(yùn)算蹄葱。位運(yùn)算符可以分為邏輯運(yùn)算符(包括~氏义、&、|和^)及移位運(yùn)算符(包括>>图云、<<和>>>)惯悠。
1)左移位運(yùn)算符(<<)能將運(yùn)算符左邊的運(yùn)算對(duì)象向左移動(dòng)運(yùn)算符右側(cè)指定的位數(shù)(在低位補(bǔ)0)。
2)“有符號(hào)”右移位運(yùn)算符(>>)則將運(yùn)算符左邊的運(yùn)算對(duì)象向右移動(dòng)運(yùn)算符右側(cè)指定的位數(shù)琼稻。 “有符號(hào)”右移位運(yùn)算符使用了“符號(hào)擴(kuò)展”:若值為正吮螺,則在高位插入0;若值為負(fù)帕翻,則在高位插入1鸠补。
3)Java也添加了一種“無符號(hào)”右移位運(yùn)算符(>>>),它使用了“零擴(kuò)展”:無論正負(fù)嘀掸,都在高位插入0紫岩。這一運(yùn)算符是C或C++沒有的。
4)若對(duì)char睬塌,byte或者short進(jìn)行移位處理泉蝌,那么在移位進(jìn)行之前,它們會(huì)自動(dòng)轉(zhuǎn)換成一個(gè)int揩晴。 只有右側(cè)的5個(gè)低位才會(huì)用到勋陪。這樣可防止我們?cè)谝粋€(gè)int數(shù)里移動(dòng)不切實(shí)際的位數(shù)。 若對(duì)一個(gè)long值進(jìn)行處理硫兰,最后得到的結(jié)果也是long诅愚。此時(shí)只會(huì)用到右側(cè)的6個(gè)低位,防止移動(dòng)超過long值里現(xiàn)成的位數(shù)劫映。 但在進(jìn)行“無符號(hào)”右移位時(shí)违孝,也可能遇到一個(gè)問題。若對(duì)byte或short值進(jìn)行右移位運(yùn)算泳赋,得到的可能不是正確的結(jié)果(Java 1.0和Java 1.1特別突出)雌桑。 它們會(huì)自動(dòng)轉(zhuǎn)換成int類型,并進(jìn)行右移位祖今。但“零擴(kuò)展”不會(huì)發(fā)生校坑,所以在那些情況下會(huì)得到-1的結(jié)果。
在進(jìn)行位運(yùn)算時(shí)千诬,需要注意以下幾點(diǎn)撒踪。

(1)>>>和>>的區(qū)別是:在執(zhí)行運(yùn)算時(shí),>>>運(yùn)算符的操作數(shù)高位補(bǔ)0大渤,而>>運(yùn)算符的操作數(shù)高位移入原來高位的值制妄。

(2)右移一位相當(dāng)于除以2,左移一位(在不溢出的情況下)相當(dāng)于乘以2泵三;移位運(yùn)算速度高于乘除運(yùn)算耕捞。

(3)若進(jìn)行位邏輯運(yùn)算的兩個(gè)操作數(shù)的數(shù)據(jù)長度不相同衔掸,則返回值應(yīng)該是數(shù)據(jù)長度較長的數(shù)據(jù)類型。

(4)按位異或可以不使用臨時(shí)變量完成兩個(gè)值的交換俺抽,也可以使某個(gè)整型數(shù)的特定位的值翻轉(zhuǎn)敞映。

(5)按位與運(yùn)算可以用來屏蔽特定的位,也可以用來取某個(gè)數(shù)型數(shù)中某些特定的位磷斧。

(6)按位或運(yùn)算可以用來對(duì)某個(gè)整型數(shù)的特定位的值置l振愿。

3.位運(yùn)算符的優(yōu)先級(jí)
~的優(yōu)先級(jí)最高,其次是<<弛饭、>>和>>>冕末,再次是&,然后是^侣颂,優(yōu)先級(jí)最低的是|档桃。

**二, 按位異或運(yùn)算符^ **
參與運(yùn)算的兩個(gè)值憔晒,如果兩個(gè)相應(yīng)位相同藻肄,則結(jié)果為0,否則為1拒担。即:0^0=0嘹屯, 1^0=1, 0^1=1从撼, 1^1=0
例如:10100001^00010001=10110000
   00=0,01=1 0異或任何數(shù)=任何數(shù)
   10=1,11=0 1異或任何數(shù)-任何數(shù)取反
   任何數(shù)異或自己=把自己置0
(1)按位異或可以用來使某些特定的位翻轉(zhuǎn)州弟,如對(duì)數(shù)10100001的第2位和第3位翻轉(zhuǎn),可以將數(shù)與00000110進(jìn)行按位異或運(yùn)算谋逻。                     10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6
(2)通過按位異或運(yùn)算,可以實(shí)現(xiàn)兩個(gè)值的交換桐经,而不必使用臨時(shí)變量毁兆。
例如交換兩個(gè)整數(shù)a,b的值阴挣,可通過下列語句實(shí)現(xiàn):
a=10100001,b=00000110
a=a^b气堕;   //a=10100111
b=b^a;   //b=10100001
a=a^b畔咧;   //a=00000110
(3)異或運(yùn)算符的特點(diǎn)是:數(shù)a兩次異或同一個(gè)數(shù)b(a=abb)仍然為原值a.

** 三茎芭,Java 中除了二進(jìn)制的表示方法: **
由于數(shù)據(jù)在計(jì)算機(jī)中的表示,最終以二進(jìn)制的形式存在誓沸,所以有時(shí)候使用二進(jìn)制梅桩,可以更直觀地解決問題。
但拜隧,二進(jìn)制數(shù)太長了宿百。比如int 類型占用4個(gè)字節(jié)趁仙,32位。比如100垦页,用int類型的二進(jìn)制數(shù)表達(dá)將是:
0000 0000 0000 0000 0110 0100
面對(duì)這么長的數(shù)進(jìn)行思考或操作雀费,沒有人會(huì)喜歡。因此痊焊,C,C++,以及java中 沒有提供在代碼直接寫二進(jìn)制數(shù)的方法盏袄。
** 八進(jìn)制數(shù)的表達(dá)方法 **
如何表達(dá)一個(gè)八進(jìn)制數(shù)呢?如果這個(gè)數(shù)是 876,我們可以斷定它不是八進(jìn)制數(shù)薄啥,因?yàn)榘诉M(jìn)制數(shù)中不可能出7以上的阿拉伯?dāng)?shù)字辕羽。但如果這個(gè)數(shù)是123、是567罪佳,或12345670逛漫,那么它是八進(jìn)制數(shù)還是10進(jìn)制數(shù),都有可能赘艳。
所以規(guī)定酌毡,一個(gè)數(shù)如果要指明它采用八進(jìn)制,必須在它前面加上一個(gè)0蕾管,如:123是十進(jìn)制枷踏,但0123則表示采用八進(jìn)制。這就是八進(jìn)制數(shù)的表達(dá)方法掰曾。 現(xiàn)在旭蠕,對(duì)于同樣一個(gè)數(shù),比如是100旷坦,我們?cè)诖a中可以用平常的10進(jìn)制表達(dá)掏熬,例如在變量初始化時(shí):
int a = 100;
我們也可以這樣寫:
int a = 0144; //0144是八進(jìn)制的100;一個(gè)10進(jìn)制數(shù)如何轉(zhuǎn)成8進(jìn)制秒梅。
千萬記住旗芬,用八進(jìn)制表達(dá)時(shí),你不能少了最前的那個(gè)0捆蜀。否則計(jì)算機(jī)會(huì)通通當(dāng)成10進(jìn)制疮丛。不過,有一個(gè)地方使用八進(jìn)制數(shù)時(shí)辆它,卻不能使用加0誊薄,那就是我們前面學(xué)的用于表達(dá)字符的“轉(zhuǎn)義符”表達(dá)法。
** 十六進(jìn)制數(shù)的表達(dá)方法 **
如果不使用特殊的書寫形式锰茉,16進(jìn)制數(shù)也會(huì)和10進(jìn)制相混呢蔫。隨便一個(gè)數(shù):9876,就看不出它是16進(jìn)制或10進(jìn)制飒筑。
16進(jìn)制數(shù)必須以 0x開頭咐刨。比如 0x1表示一個(gè)16進(jìn)制數(shù)昙衅。而1則表示一個(gè)十進(jìn)制。另外如:0xff,0xFF,0X102A,等等定鸟。其中的x也也不區(qū)分大小寫而涉。(注意:0x中的0是數(shù)字0,而不是字母O)
以下是一些用法示例:
int a = 0x100F;
int b = 0x70 + a;
最后一點(diǎn)很重要联予,10進(jìn)制數(shù)有正負(fù)之分啼县,比如12表示正12,而-12表示負(fù) 12沸久,季眷;但8進(jìn)制和16進(jìn)制只能用來表達(dá)無符號(hào)的正整數(shù),如果你在代碼中里:-078卷胯,或者寫:-0xF2,編譯器并不把它當(dāng)成一個(gè)負(fù)數(shù)子刮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窑睁,隨后出現(xiàn)的幾起案子挺峡,更是在濱河造成了極大的恐慌,老刑警劉巖担钮,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橱赠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡箫津,警方通過查閱死者的電腦和手機(jī)狭姨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苏遥,“玉大人饼拍,你說我怎么就攤上這事√锾浚” “怎么了师抄?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诫肠。 經(jīng)常有香客問我司澎,道長欺缘,這世上最難降的妖魔是什么栋豫? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮谚殊,結(jié)果婚禮上丧鸯,老公的妹妹穿的比我還像新娘。我一直安慰自己嫩絮,他們只是感情好丛肢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布围肥。 她就那樣靜靜地躺著,像睡著了一般蜂怎。 火紅的嫁衣襯著肌膚如雪穆刻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天杠步,我揣著相機(jī)與錄音氢伟,去河邊找鬼。 笑死幽歼,一個(gè)胖子當(dāng)著我的面吹牛朵锣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甸私,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼诚些,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了皇型?” 一聲冷哼從身側(cè)響起诬烹,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犀被,沒想到半個(gè)月后椅您,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寡键,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年掀泳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西轩。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡员舵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藕畔,到底是詐尸還是另有隱情马僻,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布注服,位于F島的核電站韭邓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏溶弟。R本人自食惡果不足惜女淑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辜御。 院中可真熱鬧鸭你,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至愉老,卻和暖如春场绿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫉入。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工裳凸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劝贸。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓姨谷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親映九。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梦湘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • 數(shù)據(jù)在計(jì)算機(jī)中都是以補(bǔ)碼形式存放的,位運(yùn)算也是以一個(gè)數(shù)的補(bǔ)碼進(jìn)行運(yùn)算件甥,結(jié)果也自然也是一個(gè)補(bǔ)碼捌议,這點(diǎn)在分析計(jì)算過程時(shí)...
    SharpChen閱讀 708評(píng)論 0 4
  • 本章將會(huì)介紹 模塊和源文件訪問級(jí)別訪問控制語法自定義類型子類常量瓣颅、變量、屬性譬正、下標(biāo)構(gòu)造器協(xié)議擴(kuò)展泛型類型別名位運(yùn)算...
    寒橋閱讀 888評(píng)論 0 2
  • 高級(jí)運(yùn)算符(Advanced Operators) 本文參考自蘋果官方文檔Advanced Operators本頁...
    果啤閱讀 1,595評(píng)論 1 5
  • 一項(xiàng)指令是否具有權(quán)力宫补,決定者是指令的接受者,并非是指令的發(fā)出者曾我。讓員工欣然接受你的命令粉怕,通過自己的努力來完成任務(wù),...
    濰坊泰華DDM店劉云閱讀 257評(píng)論 0 0
  • 【點(diǎn)石成金】20170606 學(xué)習(xí)力6 Day22 今天的踐行依舊是每天必做的精讀與泛讀抒巢。二十天下來贫贝,我收...
    葉子ya豆子閱讀 232評(píng)論 0 0