[英]Javascript xor ^ with 0 return bad result
我正在使用具有2個變量的二進制異或運算符^,如下所示:
var v1 = 0;
var v2 = 3834034524;
var result = v1 ^ v2;
其結果是-460932772。 你知道為什么嗎?
謝謝
3834034524
(作為32位無符號整數)為十六進制E486B95C
或二進制11100100100001101011100101011100
。 請注意,最高位(最左邊)被設置。 這是32位帶符號整數上的符號位。
在那里,該位模式轉換為十進制-460932772
。 XOR操作將結果強制為有符號整數。
附加信息:32位帶符號整數可以處理-2147483648到+2147483647的值(超出了您的原始值,因此被包裹 )。 32位無符號整數處理從0到+4294967295的值。 JavaScript是一種動態類型化的語言,值可以根據需要更改類型。 該數字可能成為浮點值,或者按位運算可能會將其變成整數,或者可能成為字符串。 在最新版本的JavaScript中,有一些使用特定數據類型的方法,但是您不需要通過簡單的計算就可以做到這一點。
這些是帶符號的數字,這是預期的行為。
只是將結果截斷為無符號整數
var result = (v1 ^ v2) >>> 0;
ToInt32
操作不會保留符號-它會將您的數字強制轉換為帶符號的32位表示形式。 由於3834034524大於2 31 ,它將溢出並產生負整數。
010 --ToInt32--> 000000000000000000000000000000002 ^ 383403452410 --ToInt32--> 111001001000011010111001010111002 V xor V = -46093277210 <-fromInt32- 111001001000011010111001010111002
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.