最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

JAVA 位運(yùn)算

2021-04-20 15:55 作者:光耀三十洲  | 我要投稿

前言 :

為什么需要介紹下位運(yùn)算呢?其實(shí)我是在發(fā)現(xiàn)不少性能代碼都有不少位運(yùn)算的身影,之前一直提到位運(yùn)算的性能高,但是工作中業(yè)務(wù)碼農(nóng)過程用到的極少,一直沒有用心去了解它,今天就來一起看看這家伙怎么這么牛!文章如果有什么不正確的地方,歡迎大家指出哈,感謝感謝.

● 十進(jìn)制轉(zhuǎn)二進(jìn)制(正負(fù)數(shù)) ● 二進(jìn)制加減法 ● ?位運(yùn)算符 ● ?位移動(dòng)運(yùn)算符

十進(jìn)制轉(zhuǎn)二級(jí)制

位運(yùn)算是二級(jí)制的事情,不過由于我們常常使用的是十位數(shù)的計(jì)算,先來重溫下十進(jìn)制轉(zhuǎn)成二進(jìn)制的方法。

方法: 給定的十進(jìn)制數(shù)值除以二,記錄余數(shù)(0 | 1),直到結(jié)束,將所得余數(shù)反著讀,就是其二進(jìn)制數(shù)值,同時(shí)這個(gè)值也稱為原碼。若是為負(fù)數(shù)時(shí),其轉(zhuǎn)成二進(jìn)制方式為原碼 -> 反碼(原碼的 0 變 1,1 變成 0) -> 補(bǔ)碼(將反碼 + 1)。

(1)正數(shù)十進(jìn)制 29 轉(zhuǎn) 成二進(jìn)制數(shù)值 變成 11101 。

(2)負(fù)數(shù) -29,得到原碼 11101,轉(zhuǎn)化反碼得到 00010,再得到反碼 00011,表示負(fù)數(shù)前面補(bǔ) 1,如需要獲取 32 位二進(jìn)制數(shù)據(jù),則 -29的二進(jìn)制為 1111 1111 1111 1111 1111 1111 1110 0011。

補(bǔ)充:小伙伴想要驗(yàn)證自己的計(jì)算答案可以利用JAVA 中,十進(jìn)制轉(zhuǎn)二進(jìn)制的方式,(N 為此處的十進(jìn)制數(shù)值) Integer.toBinaryString(N);可以輸出轉(zhuǎn)化二進(jìn)制結(jié)果。二進(jìn)制轉(zhuǎn)十進(jìn)制方式, 1100 轉(zhuǎn)十進(jìn)制,為 Integer.pase("1100",2);

二進(jìn)制加減法

剛剛獲取負(fù)數(shù)的時(shí)候,已經(jīng)發(fā)現(xiàn)二進(jìn)制也有加法計(jì)算喲,簡單描述下加減法的過程,主要注意加法中 1+ 1 結(jié)果為 0,需要進(jìn)一位,減法中, 0 - 1 需要借一位當(dāng)成 2 計(jì)算,結(jié)果為 1 。

二進(jìn)制篇旁括號(hào)內(nèi)為其十進(jìn)制的值。

加法: 0101 (5) + 1101 (13)

image.png

在運(yùn)算過程中,從右往左逐位進(jìn)行計(jì)算。

  • 1 + 1 = 0 ;進(jìn)一位。

  • 0 + 0 + ?1(進(jìn)一位) = 1。

  • 1 + 1 = 0 ;進(jìn)一位。

  • 0 + 1 +1(進(jìn)一位)= 0 ;進(jìn)一位。

  • 接下去沒有數(shù)補(bǔ)上進(jìn)一位的值,則結(jié)果為 1 0 0 1 0(18)。

減法:0101- ?1101

image.png

運(yùn)算過程:

  • 1 - 1 = 0;

  • 0 - 0 = 0;

  • 1 - 1 = 0;

  • 0 - 1 = -1 + 2 (借一位)= 1

  • 此處位置沒有值啦,需要一直借下去 一直會(huì)是 1。 若是結(jié)果為 32 位,那么值就是 1111 1111 1111 1111 1111 1111 1111 1000(- 8);

位運(yùn)算符

主要包含了四種位運(yùn)算符:與( & )、非( ~ )、或( | )、異或( ^ )

計(jì)算方式,簡單贅述,總結(jié)一下特點(diǎn)如下 ——

  • 與 ? ( & ):都是 1 ,才是 1。

  • 非 ? ( ~ ):0 變 1,1 變 0。

  • 或 ? ( | ):有 1 就是 1。

  • 異或 ( ^ ):相同為 0,不同為 1。

位移動(dòng)運(yùn)算符

主要包含三種 << (左移)、>> (右移)、>>>(無符號(hào)右移),看到這里符號(hào),一開始面試題里面出現(xiàn)的,如何最快算出一個(gè)數(shù)乘以 8 的計(jì)算方式?答案就是: 數(shù) << 3。因?yàn)橛?jì)算機(jī)語言就是二進(jìn)制呀,不管是 JAVA 還是其他的語言,最終都是轉(zhuǎn)成二進(jìn)制進(jìn)行運(yùn)算的,如果直接就是二進(jìn)制的計(jì)算方式,不就不用轉(zhuǎn)啦。

「因?yàn)橐莆恢噶钫?個(gè)機(jī)器周期,而乘除法指令占4個(gè)機(jī)器周期?!?/p>

<< (左移) N: 把原有的值往左邊移動(dòng) N 位,低位補(bǔ)充 N個(gè) 0,從計(jì)算上,是把原先的值乘以N個(gè)2,

1001 << 3 :

image.png

(右移)>> N: 此處就有了區(qū)分正負(fù)數(shù),頂位為 0 則是正數(shù),頂位為 1 則是負(fù)數(shù)。 把原有的值往右邊移動(dòng) N 位,若是正數(shù),高位需要補(bǔ) 0 ,若是負(fù)數(shù),高位補(bǔ) 1。實(shí)際計(jì)算相當(dāng)于除以 N 次 2。

image.png

(無符號(hào)右移)>>> 形同 >> (右移),不過不用管正負(fù)數(shù)了,高位一律補(bǔ) 0,就完事啦。

對(duì)比:

  • 1101 0101 >> 2 ?= 11110101

  • 1101 0101 >>> 2 = 00110101


作者:Solming
鏈接:https://juejin.cn/post/6952866830889254925
來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。


JAVA 位運(yùn)算的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
衡南县| 宁城县| 金乡县| 县级市| 大同市| 双鸭山市| 孝昌县| 奉贤区| 钟山县| 双柏县| 长泰县| 西青区| 方正县| 中宁县| 乃东县| 阿坝县| 洪湖市| 安义县| 澜沧| 泸定县| 榕江县| 博野县| 乌恰县| 仙居县| 宜章县| 南平市| 镇远县| 乃东县| 岑溪市| 福安市| 河池市| 白银市| 汽车| 彰化市| 汶上县| 广昌县| 建水县| 天气| 蒲城县| 穆棱市| 双桥区|