国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript Bitwise NOT Operator

zengdongbao / 2520人閱讀

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

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

比如這題:

~-(2+"2")

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

不懂就補(bǔ)嘍。

這回還真是“補(bǔ)”,回想起大學(xué)那會(huì)兒,學(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

又琢磨了一會(huì)兒,才搞明白為啥補(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

這個(gè)結(jié)果符合直覺,但加法器的實(shí)現(xiàn)只會(huì)使用二補(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對(duì)此解釋得更直接:

~ 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://m.specialneedsforspecialkids.com/yun/92180.html

相關(guān)文章

  • 常用的JavaScript位操作(Bitwise)

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

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

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

    YanceyOfficial 評(píng)論0 收藏0
  • leetcode201. Bitwise AND of Numbers Range

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

    wapeyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<