位運(yùn)算的黑科技

最近在學(xué)NodeJs,然后練手做項(xiàng)目的時(shí)候想用下位運(yùn)算冕屯,需求是除2舍小數(shù)位,于是想像Java一樣拂苹,直接除2安聘,發(fā)現(xiàn)并不行

    console.log(5/2);
    sivan@sivan-All-Series:~/workspace/nodejs/interesting_book$ node h.js
    2.5

想了下發(fā)現(xiàn)很正常,因?yàn)镴avaScript是弱數(shù)據(jù)語(yǔ)言瓢棒,全部的變量都可以用一個(gè)var來(lái)聲明的浴韭,所以結(jié)果的表現(xiàn)是浮點(diǎn)型,確實(shí)很正常脯宿。
于是換了一種方式念颈,之間看Java的部分源碼看到位運(yùn)算的相關(guān)操作(后面會(huì)提),所以在這也試下位運(yùn)算

    console.log(5/2>>1/2);
    sivan@sivan-All-Series:~/workspace/nodejs/interesting_book$ node h.js
    2

結(jié)果一試就不得了了连霉,居然還真的試出來(lái)了
而在js的運(yùn)算符中榴芳,算術(shù)運(yùn)算符的優(yōu)先級(jí)是大于移位運(yùn)算符的,也就是上面的代碼可以換成這樣

    console.log(2.5 >> 0.5);
    sivan@sivan-All-Series:~/workspace/nodejs/interesting_book$ node h.js
    2

而結(jié)果確實(shí)一樣窘面,覺(jué)得很黑科技翠语,居然還能用浮點(diǎn)數(shù)做移位運(yùn)算,右移0.5位财边?這么黑科技的肌括,于是這個(gè)時(shí)候,去Java上嘗試了一下


Java下的嘗試

這邊就很正常啦,因?yàn)镴ava里面谍夭,整數(shù)之間進(jìn)行運(yùn)算黑滴,得到的數(shù)還是整數(shù),也就是上面的圖片實(shí)際上相當(dāng)于(2 >> 0)
于是測(cè)試下


換成浮點(diǎn)型

換成整型

可見(jiàn)確實(shí)如同猜測(cè)一樣
于是紧索,結(jié)合Java里出現(xiàn)的情況袁辈,對(duì)JS中的情況做了個(gè)猜測(cè),js在有算術(shù)運(yùn)算和移位運(yùn)算同時(shí)存在的情況下珠漂,會(huì)將算術(shù)運(yùn)算的結(jié)果轉(zhuǎn)成整型再運(yùn)算
下面驗(yàn)證下猜測(cè)

    console.log(5/2>>1/2);
    console.log(2.5 >> 0.5);
    console.log(5/2 >> 0);
    console.log(2 >> 1/2);
    console.log(5.9/2 >> 0);
    console.log(2 >> 0);

如無(wú)意外晚缩,這一批的log的結(jié)果,都會(huì)是2

    sivan@sivan-All-Series:~/workspace/nodejs/interesting_book$ node h.js
    2
    2
    2
    2  
    2
    2

結(jié)果確實(shí)如同預(yù)料般媳危。

那這個(gè)位運(yùn)算有啥用呢荞彼?

首先
哈哈哈,起碼知道待笑,在JS中想得到除以某個(gè)數(shù)舍小數(shù)位鸣皂,只要右移或者左移0位就行了,像console.log(5/2 >> 0);---->2這樣暮蹂。
除了這個(gè)發(fā)現(xiàn)之外寞缝,其實(shí)位運(yùn)算確實(shí)挺方便的,比如
想要放大或者縮小2的N次冪的倍數(shù)仰泻,只要左移或者右移N位就行了

1位是為2的1次冪

移幾位這個(gè)可能會(huì)迷糊荆陆,其實(shí)聯(lián)想下十進(jìn)制就行了,500右移一位變成50我纪,縮小了10倍慎宾,右移兩位變成5,縮小了100倍也就是10的2次冪浅悉,所以無(wú)論什么進(jìn)制都一樣,移動(dòng)N位券犁,就變化進(jìn)制的N次冪
其次還有一個(gè)术健,如何快速得到某個(gè)數(shù)最接近的偏大2的次冪數(shù),比如15--16,16--16,17--32
答案就在HashMap的源碼

重點(diǎn)是n |= n >>> N這幾行代碼粘衬,畫(huà)個(gè)圖就懂了

image.png

因?yàn)檫M(jìn)行了多次|=運(yùn)算的運(yùn)算荞估,所以可以確保從最高位到最低位都是1,也就是值為2的N次方-1
其中因?yàn)閖ava中int的長(zhǎng)度為32為稚新,所以有n |= n >>> 16;勘伺,這樣就能確保數(shù)很大的時(shí)候都能每一位都做過(guò)|=運(yùn)算

總結(jié)

其實(shí)位運(yùn)算的騷操作還有很多,只不過(guò)水平有限褂删,計(jì)算機(jī)組成原理學(xué)的也不怎么樣飞醉,所以這些其實(shí)也只是小打小鬧。

水平有限屯阀,難免有錯(cuò)缅帘,還請(qǐng)諸君指正轴术。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钦无,隨后出現(xiàn)的幾起案子逗栽,更是在濱河造成了極大的恐慌,老刑警劉巖失暂,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彼宠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弟塞,警方通過(guò)查閱死者的電腦和手機(jī)凭峡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宣肚,“玉大人想罕,你說(shuō)我怎么就攤上這事∶拐牵” “怎么了按价?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)笙瑟。 經(jīng)常有香客問(wèn)我楼镐,道長(zhǎng),這世上最難降的妖魔是什么往枷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任框产,我火速辦了婚禮,結(jié)果婚禮上错洁,老公的妹妹穿的比我還像新娘秉宿。我一直安慰自己冀膝,他們只是感情好柄瑰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布精堕。 她就那樣靜靜地躺著竹握,像睡著了一般诚隙。 火紅的嫁衣襯著肌膚如雪辕录。 梳的紋絲不亂的頭發(fā)上碉考,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天轿曙,我揣著相機(jī)與錄音今艺,去河邊找鬼韵丑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛虚缎,可吹牛的內(nèi)容都是我干的撵彻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼千康!你這毒婦竟也來(lái)了享幽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拾弃,失蹤者是張志新(化名)和其女友劉穎值桩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體豪椿,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奔坟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搭盾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咳秉。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸯隅,靈堂內(nèi)的尸體忽然破棺而出澜建,到底是詐尸還是另有隱情,我是刑警寧澤蝌以,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布炕舵,位于F島的核電站,受9級(jí)特大地震影響跟畅,放射性物質(zhì)發(fā)生泄漏咽筋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一徊件、第九天 我趴在偏房一處隱蔽的房頂上張望奸攻。 院中可真熱鬧,春花似錦虱痕、人聲如沸睹耐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疏橄。三九已至,卻和暖如春略就,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晃酒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工表牢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贝次。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓崔兴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敲茄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 位運(yùn)算 位運(yùn)算的運(yùn)算分量只能是整型或字符型數(shù)據(jù)徽千,位運(yùn)算把運(yùn)算對(duì)象看作是由二進(jìn)位組成的位串信息苫费,按位完成指定的運(yùn)算,...
    IIronMan閱讀 7,731評(píng)論 0 2
  • 1 關(guān)鍵字 1.1 關(guān)鍵字的概述 Java的關(guān)鍵字對(duì)java的編譯器有特殊的意義罐栈,他們用來(lái)表示一種數(shù)據(jù)類(lèi)型黍衙,或...
    哈哈哎呦喂閱讀 646評(píng)論 0 0
  • 本章將會(huì)介紹 模塊和源文件訪問(wèn)級(jí)別訪問(wèn)控制語(yǔ)法自定義類(lèi)型子類(lèi)常量琅翻、變量、屬性柑贞、下標(biāo)構(gòu)造器協(xié)議擴(kuò)展泛型類(lèi)型別名位運(yùn)算...
    寒橋閱讀 874評(píng)論 0 2
  • 《如何閱讀一本書(shū)》莫提默·J.艾德勒 閱讀分四個(gè)層次方椎,分別是:基礎(chǔ)閱讀、檢視閱讀钧嘶、分析閱讀和主題閱讀棠众。 1. 第一...
    文小輝cool閱讀 274評(píng)論 0 2
  • 16年5月9日晚咱們各回各家了,轉(zhuǎn)眼間整整一年過(guò)去了有决,雖上的不是名牌大學(xué)闸拿,但是能遇到你們,就是我這輩子最大的收獲书幕。...
    欣丫頭閱讀 266評(píng)論 0 0