JavaScript运算符
JavaScript位运算符
位运算符处理32位有符号数,该运算中的任何数值运算都会被转换为32位数。
运算符 | 名称 | 例子 | 等同于 | 结果 | 十进制 | 描述 |
---|---|---|---|---|---|---|
& | 与 | 5 & 1 | 0101 & 0001 | 0001 | 1 | 如果两位都是1,则为1 |
| | 或 | 5 | 1 | 0101 | 0001 | 0101 | 5 | 如果两位之一为1,则为1 |
~ | 非 | ~5 | ~0101 | 1010 | -6 | 反转所有位(1变成0,0变成1) |
^ | 异或 | 5 ^ 1 | 0101 ^ 0001 | 0100 | 4 | 如果两位只有一位为1,则为1 |
<< | 零填充左位移 | 5<<1 | 0101<<1 | 1010 | 10 | 所有位都向左移,最右位0填充 |
>> | 有符号右位移 | 5>>1 | 0101>>1 | 0010 | 2 | 所有位都向右移,但符号位保留 |
>>> | 零填充右位移 | 5>>>1 | 0101>>>1 | 0010 | 2 | 所有位都向右移,最左位0填充 |
注:由于上述例子中使用的是4位无符号数,但JavaScript使用的是32位有符号数。因次在JavaScript中,~5不会返回10,而是返回-6
~00000000000000000000000000000101 将返回 11111111111111111111111111111010
补充—位运算补码
负数是正数的二进制补码加1:
二进制表示 | 十进制值 |
---|---|
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
11111111111111111111111111011001 | -41 |
十进制与二进制之间的转换
//把十进制转换为二进制
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
//把二进制转换为十进制
function bin2dec(bin){
return parseInt(bin,2).toString(10);
}