JavaScript中,位移賦值指的是位運算符與“=”的結(jié)合,用于同時對位運算表達式和賦值表達式進行計算和賦值操作。位移賦值常用于位運算、循環(huán)操作等場景中,可以非常方便地實現(xiàn)位移、位取反和位賦值等功能。下面我們來具體介紹一下JS的位移賦值。
首先,最常用的位移賦值是 "<<=" 和 ">>=",分別對應左移和右移操作。例如:
var num = 100; // 二進制為 01100100 num <<= 2; // 等價于 num = num << 2,即左移兩位 document.write(num); // 結(jié)果為 400,二進制為 11001000 num >>= 3; // 等價于 num = num >> 3,即右移三位 document.write(num); // 結(jié)果為 50,二進制為 00110010
另一種常用的位運算符是按位與(&)、按位或(|)和按位異或(^),也可以用于位移賦值。例如:
var num = 15; // 二進制為 00001111 num |= 8; // 等價于 num = num | 8,即在第四位上置1 document.write(num); // 結(jié)果為 15,二進制為 00001111 num ^= 2; // 等價于 num = num ^ 2,即在第一位上取反 document.write(num); // 結(jié)果為 13,二進制為 00001101
此外,還有位取反(~)操作,它可以將每個二進制位取反后再加1,常用于計算負數(shù)的補碼。用位取反來實現(xiàn)數(shù)值的取反操作也很方便。例如:
var num = 100; // 二進制為 01100100 var neg_num = ~num + 1; // ~num 即為補碼,加1變?yōu)樵钾摂?shù) document.write(neg_num); // 結(jié)果為 -100
需要注意的是,由于JS中使用的是32位表示整數(shù)的補碼形式,因此需要對負數(shù)進行偏移,以避免出現(xiàn)意外結(jié)果。例如:
var neg_num = -8; var pos_num = neg_num >>> 0; // 先進行無符號右移操作,將負數(shù)轉(zhuǎn)為正數(shù) document.write(pos_num); // 最終結(jié)果為 4294967288,即 2^32 - 8
在循環(huán)操作中,位移賦值也能夠大顯身手。例如:
var i = 10; while (i--) { // 等價于 i = i - 1 document.write(i + " "); } // 輸出結(jié)果為 9 8 7 6 5 4 3 2 1 0 var num = 100; while (num >>= 1) { // 等價于 num = num >> 1 document.write(num + " "); } // 輸出結(jié)果為 50 25 12 6 3 1
總之,JS的位移賦值非常方便實用,在位運算、循環(huán)操作、位取反和位賦值等方面都能夠派上大用場。需要注意的是,位移賦值也有一些需要注意的細節(jié)和特殊情況,要特別小心。