簡體   English   中英

Javascript Xor ^ 0返回不良結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM