成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript Bitwise NOT Operator

zengdongbao / 2525人閱讀

摘要:心血來潮地跑到做了個,結(jié)果當(dāng)然是慘不忍睹,發(fā)現(xiàn)自己對不少的基礎(chǔ)知識的理解是模模糊糊,甚至是錯的。讀到又琢磨了一會兒,才搞明白為啥補(bǔ)碼這么反直覺。二補(bǔ)碼只能腦補(bǔ),或者用代碼打印腦補(bǔ)的內(nèi)容。寫了半天,一言以蔽之相當(dāng)于調(diào)用參考鏈接

心血來潮地跑到Upworks做了個JavaScript Test,結(jié)果當(dāng)然是慘不忍睹,發(fā)現(xiàn)自己對不少JavaScript的基礎(chǔ)知識的理解是模模糊糊,甚至是錯的。

比如這題:

~-(2+"2")

這個表達(dá)式的值是21,我腦補(bǔ)了好久也得不到這個答案,這才發(fā)現(xiàn),我完全不理解Bitwise NOT操作符。

不懂就補(bǔ)嘍。

這回還真是“補(bǔ)”,回想起大學(xué)那會兒,學(xué)到“補(bǔ)碼”時(shí),腦子里就是一團(tuán)霧,原來那團(tuán)迷霧到今天也沒散,真他么黏糊。

讀到 Why is ~5 === -6 in JavaScript?:

It does indeed perform a bit-wise NOT, the negative number is in two"s complement. So the value 1010 is -6.

Two"s complement basically works by the very left-most bit signifies a negative number and is taken as a negative value. All other 1 bits are added to this number. For example:

1010 => (-8 +0 +2 +0) => -6
1111 => (-8 +4 +2 +1) => -1

又琢磨了一會兒,才搞明白為啥補(bǔ)碼這么反直覺。

“二補(bǔ)碼”只能腦補(bǔ),或者用代碼打印腦補(bǔ)的內(nèi)容。

在JavaScript里,如果用number.toString(2),結(jié)果是這樣:

Decimal:   5  |  Binary: 00000000000000000000000000000101
Decimal:   4  |  Binary: 00000000000000000000000000000100
Decimal:   3  |  Binary: 00000000000000000000000000000011
Decimal:   2  |  Binary: 00000000000000000000000000000010
Decimal:   1  |  Binary: 00000000000000000000000000000001
Decimal:   0  |  Binary: 00000000000000000000000000000000
Decimal:  -0  |  Binary: 00000000000000000000000000000000
Decimal:  -1  |  Binary: 000000000000000000000000000000-1
Decimal:  -2  |  Binary: 00000000000000000000000000000-10
Decimal:  -3  |  Binary: 00000000000000000000000000000-11
Decimal:  -4  |  Binary: 0000000000000000000000000000-100
Decimal:  -5  |  Binary: 0000000000000000000000000000-101

這個結(jié)果符合直覺,但加法器的實(shí)現(xiàn)只會使用二補(bǔ)碼,下面是加法器實(shí)際使用的“二補(bǔ)碼”:

Decimal:   5  |  Binary: 00000000000000000000000000000101
Decimal:   4  |  Binary: 00000000000000000000000000000100
Decimal:   3  |  Binary: 00000000000000000000000000000011
Decimal:   2  |  Binary: 00000000000000000000000000000010
Decimal:   1  |  Binary: 00000000000000000000000000000001
Decimal:   0  |  Binary: 00000000000000000000000000000000
Decimal:  -0  |  Binary: 00000000000000000000000000000000
Decimal:  -1  |  Binary: 11111111111111111111111111111111
Decimal:  -2  |  Binary: 11111111111111111111111111111110
Decimal:  -3  |  Binary: 11111111111111111111111111111101
Decimal:  -4  |  Binary: 11111111111111111111111111111100
Decimal:  -5  |  Binary: 11111111111111111111111111111011

理解了二補(bǔ)碼,再來看-22怎么被補(bǔ)成21的:

Decimal: -22  |  Binary: 11111111111111111111111111101010
->
Decimal:  21  |  Binary: 00000000000000000000000000010101

Python對此解釋得更直接:

~ x
Returns the complement of x - the number you get by switching each 1 for a 0 and each 0 for a 1.
This is the same as -x - 1.

我連補(bǔ)碼都沒鬧明白,竟然過了關(guān)還Score top 30%,可見其他人都沒作弊,我真是無恥的程序員。

寫了半天,一言以蔽之:

~x 相當(dāng)于調(diào)用

function twosComplement(x){
    return 0 -x - 1;
}

參考鏈接:

Why is ~5 === -6 in JavaScript?

Why does bitwise “not 1” equal -2?

MDN Bitwise operators

Python"s bitwise operators.

Two"s Complement

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92180.html

相關(guān)文章

  • 常用的JavaScript位操作(Bitwise)

    摘要:雖然需要轉(zhuǎn)換,但這個過程與其他數(shù)學(xué)運(yùn)算和布爾操作相比要快很多。位掩碼位掩碼用于處理同時(shí)存在多個布爾選項(xiàng)的情形。使用單個數(shù)字的每一位來判定選項(xiàng)是否成立,從而有效地把數(shù)字轉(zhuǎn)換為由布爾值標(biāo)記組成的數(shù)組。 位操作 JavaScript中的數(shù)字都按照IEEE-754(Institute of Electrical and Electronics Engineers)標(biāo)準(zhǔn)以64位格式存儲。在位操作...

    MoAir 評論0 收藏0
  • JavaScript 轉(zhuǎn)換數(shù)字為整數(shù)的方法

    摘要:另外自己寫代碼測試了下和的速度,比較結(jié)果如下位操作轉(zhuǎn)換整數(shù)的原理參考上面對于位操作的說明,點(diǎn)擊下面鏈接有這樣一段話中,數(shù)字存儲是雙進(jìn)度位浮點(diǎn)數(shù)。但是位操作卻會把要操作的運(yùn)算元當(dāng)做位帶符號的整數(shù)。因此進(jìn)行位操作時(shí),會自動把數(shù)字先轉(zhuǎn)換為整數(shù)。 本文將會列舉并說明JavaScript 把一個number(或者numerical的對象)轉(zhuǎn)換成一個整數(shù)相關(guān)方法。 使用parseInt parse...

    YanceyOfficial 評論0 收藏0
  • leetcode201. Bitwise AND of Numbers Range

    摘要:題目要求給一個閉區(qū)間,對該閉區(qū)間的所有數(shù)字進(jìn)行與運(yùn)算。在計(jì)算機(jī)底層所有的十進(jìn)制數(shù)都是以二進(jìn)制數(shù)進(jìn)行存儲的。因此,當(dāng)我們同時(shí)左移時(shí),一定會有一個時(shí)刻,使得與相等。這意味著,從該位起前面的所有位數(shù)值均相等。 題目要求 Given a range [m, n] where 0 >>和= 1 ; n >>>= 1; } return m>...

    wapeyang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<