2
我注意到在JS使用按位與運算一個怪異的行爲:爲什麼兩個相同的值產生不同的值的按位與?
console.log((0xd41ddb80 & 0xd41ddb80).toString(16))
結果是-2be22480,但我期待0xd41ddb80
什麼可致此行爲?
我注意到在JS使用按位與運算一個怪異的行爲:爲什麼兩個相同的值產生不同的值的按位與?
console.log((0xd41ddb80 & 0xd41ddb80).toString(16))
結果是-2be22480,但我期待0xd41ddb80
什麼可致此行爲?
從MDN
所有位運算符的操作數轉換爲符號的32位整數的二進制補碼格式。
當解釋爲有符號的32位整數時,值0xd41ddb80
表示數字-736240768
。這個數字使用任何位運算符將其強制成一個符號的32位整數:
console.log(~~0xd41ddb80)
console.log(0xd41ddb80 & 0xffffffff)
console.log(0xd41ddb80 | 0)
基16當量的-736240768
的是-2be22480
,那就是你所看到的。
您可以爲任意數量大於或等於0x80000000
觀察類似的行爲。