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

資訊專欄INFORMATION COLUMN

JavaScript Bitwise NOT Operator

zengdongbao / 2519人閱讀

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

心血來潮地跑到Upworks做了個JavaScript Test,結果當然是慘不忍睹,發現自己對不少JavaScript的基礎知識的理解是模模糊糊,甚至是錯的。

比如這題:

~-(2+"2")

這個表達式的值是21,我腦補了好久也得不到這個答案,這才發現,我完全不理解Bitwise NOT操作符。

不懂就補嘍。

這回還真是“補”,回想起大學那會兒,學到“補碼”時,腦子里就是一團霧,原來那團迷霧到今天也沒散,真他么黏糊。

讀到 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

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

“二補碼”只能腦補,或者用代碼打印腦補的內容。

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

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

這個結果符合直覺,但加法器的實現只會使用二補碼,下面是加法器實際使用的“二補碼”:

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

理解了二補碼,再來看-22怎么被補成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.

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

寫了半天,一言以蔽之:

~x 相當于調用

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92180.html

相關文章

  • 常用的JavaScript位操作(Bitwise)

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

    MoAir 評論0 收藏0
  • JavaScript 轉換數字為整數的方法

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

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

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

    wapeyang 評論0 收藏0

發表評論

0條評論

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