當我嘗試移位16位值時,我看到一些奇怪的行為
0xF << 4 == 0xF0 // true
0xFF << 8 == 0xFF00 // true
0xFFF << 12 == 0xFFF000 // true
0xFFFF << 16 == 0xFFFF0000 // false
最后一個為真的原因是0xFFFF << 16實際上給出了值-65536 。 當0xFFFF0000是JAVAScript中的有效數字時,為什么會發生這種情況
最滿意答案
因為JavaScript使用帶符號的32位整數數字進行按位運算。
這意味著,數字可能是負數。
要獲得所需的輸出,必須使用>>> 0刪除符號。
(0xFFFF << 16) >>> 0 == 0xFFFF0000
附:進制之間轉換
js的進制轉換, 分為2進制,8進制,10進制,16進制之間的相互轉換, 我們直接利用 對象.toString()即可實現:
//10進制轉為16進制
(10).toString(16) // =>"a"
//8進制轉為16進制
(012).toString(16) // =>"a"
//16進制轉為10進制
(0x16).toString(10) // =>"22"
//16進制轉為8進制
(0x16).toString(8) // =>"26"
//10進制轉為2進制 //=>
(1111).toString(2) // => "10001010111"
//8進制轉為2進制 //=>
(01111).toString(2) //=>"1001001001"
//16進制轉為2進制 //=>
(0x16).toString(2) // => "10110"
如果要處理2進制到10進制,16進制到10進制,8進制到10進制, 需要用了paresInt這個方法:
//2進制到10進制;
parseInt(10,2) //=>2
//2進制到10進制;
parseInt(100,2) //=>4
//16進制到10進制
parseInt(12, 16) //=>18
//8進制到10進制
parseInt(12,8); //=>10