當我們處理數字時,通常會使用的運算符有加、減、乘、除等。而在js中還有一類運算符,那就是移位運算符。移位運算符可以讓我們對數字進行二進制位的移動,進而實現一些效果。
在移位運算中,有三種運算符:左移(<<)、右移(>>)、和無符號右移(>>>)。以下是它們的基本語法:
var a = 2; //二進制:10 //左移1位 var b = a<< 1; //二進制: 100 //右移1位 var c = a >>1; //二進制: 1 //無符號右移1位 var d = a >>>1; //二進制: 1
接下來,我們分別介紹一下這三種運算符及其應用。
左移運算符(<<):將二進制數向左移動指定的位數。左移過程中,右側補 0,也就是在后面插入 0。比如將一個數左移1位,相當于將這個數乘以 2。就像這樣:
var a = 2; //二進制:10 //左移1位 var b = a<< 1; //二進制: 100
右移運算符(>>): 將二進制數向右移動指定的位數。右移過程中,左側根據符號位填充,也就是對于正數填充 0,負數填充 1。比如將一個數右移1位,相當于將這個數除以 2。就像這樣:
var a = 2; //二進制:10 var b = -2; //二進制:11111111111111111111111111111110 //右移1位 var c = a >>1; //二進制: 1 var d = b >>1; //二進制: 11111111111111111111111111111111
無符號右移運算符(>>>): 將二進制數向右移動指定的位數。右移過程中,左側補 0,忽略符號位的填充規則。比如將一個數無符號右移1位,相當于將這個數除以 2,不管這個數的符號是怎樣的,都會將二進制最左側的 1(如果存在)丟棄。就像這樣:
var a = 2; //二進制:10 var b = -2; //二進制:11111111111111111111111111111110 //無符號右移1位 var c = a >>>1; //二進制: 1 var d = b >>>1; //二進制: 01111111111111111111111111111111
在開發中,移位運算可以實現一些妙用。比如快速計算 2 的 n 次方:
var a = 2; //2的0次方 var b = a<< 1; //2的1次方 var c = b<< 1; //2的2次方 var d = c<< 1; //2的3次方
以上代碼就實現了從 2 的 0 次方到 2 的 3 次方的快速計算。這種方法用于數據量較小,需要頻繁計算的場合。
再比如,移位運算可以實現一些二進制相關的操作,比如獲取二進制數的某一位值:
//獲取二進制數的第 2 位 var num = 10; // 二進制:1010 var bit = 2; var val = (num >>(bit - 1)) & 1; console.log(val); //輸出 1
以上代碼就可以輸出二進制數 1010 的第 2 位值,也就是1。
總的來說,移位運算符可以讓我們更加靈活地處理數字,以適應開發中的各種要求。當然,使用移位運算符需要注意一些細節,比如溢出、精度等問題,不同的運算符還存在不同的特性。因此在使用時需要根據具體需求進行選擇。