我在JavaScript和C#中使用了&運算符,但結果不同。爲什麼在JavaScript和C#中使用&運算符時返回不同的值?
C#代碼
Int64 x = (634586400000000000 & 4611686018427387903);
x= 634586400000000000;
JavaScript代碼
var x = (634586400000000000 & 4611686018427387903);
x= 0;
任何想法?
我在JavaScript和C#中使用了&運算符,但結果不同。爲什麼在JavaScript和C#中使用&運算符時返回不同的值?
C#代碼
Int64 x = (634586400000000000 & 4611686018427387903);
x= 634586400000000000;
JavaScript代碼
var x = (634586400000000000 & 4611686018427387903);
x= 0;
任何想法?
它看起來像我超過了JavaScript的最大整數值。 JavaScript整數支持的最大值爲2^53。
UPDATE:
我在這裏的最初的反應是不正確的 - 問題不在於JavaScript的最大整數值,它的每個操作數由符號運算處理的最大值:
var biggest = 4294967291; // maximum 32 bit unsigned integer
alert(biggest & 1); // alerts 1
alert((biggest + 1) & 1); // alerts 0
快樂編碼!
乙
Bitwise operators在JavaScript轉換操作數符號的32位整數(從天然IEEE 754浮點數號碼存儲在)。
像[bigInt.js](http://www.leemon.com/crypto/BigInt.html)這樣的庫在這裏可能會有幫助,雖然我沒有親自嘗試過。 – darioo
這意味着您不能對大於(大約)20億或低於(大致)-2億的數字執行任何雙向操作。如果你這樣做,行爲沒有被定義。 –
其實行爲是明確的。從「JavaScript:The Defenitive Guide」(第73頁):「如果按位運算符的操作數不是整數或太大而不適合32位整數表示形式,則只需將操作數強制爲32位整數任何操作數的小數部分或32位以外的任何位「。 –
位運算符處理最大32位。我不知道當問它處理更大的值時,行爲是如何定義的。
...因爲JavaScript和C#是不同的語言? – BoltClock