18的二进制为10010
-18的二进制为:
先每位取反: 01101 = 1101
再给最后一位加1:1110
按位非(~):
let num1 = 25;
let num2 = ~num1; //num2为-26
也就是按位非操作符是数值取反再减一
按位与(&):
let result = 3&5 //result = 1
3 = 0 1 1
5 = 1 0 1
只有二进制两个都是1时才会返回1,所以3&5会返回 0 0 1
如果是:
result = 2&3
2 = 1 0
3 = 1 1
那result就是2,结果为1 0。
按位或(|):
参照(&)只要有一个是1就返回1,否则返回0;
按位异或(^):
参照(&)只能有一个是1才会返回1,否则返回0;
左移(<<):
let v = 2 // 1 0
let nv = v<<5 //表示将v向左移5位,即 1 0 0 0 0 0 0 ,值为 64
有符号右移(>>):
同左移
let v = 64;
let nv = v>>5 // 2
有符号右移会把0加在符号位之后
无符号右移(>>>):
let v = -64 //11111111111111111111111111000000
let nv = v>>>5 //00000111111111111111111111111110 = 134 217 726
无符号右移会把0直接加在左边,不管符号位是什么。