二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:JavaScript位运算
JavaScript 位运算符
运算符 描述 实例 等同于 结果 等同于 & 与 5 & 1 0101 & 0001 1 0001 | 或 5 | 1 0101 | 0001 5 0101 ~ 非 ~ 5 ~0101 10 1010 ^ 亦或 5 ^ 1 0101 ^ 0001 4 0100 << 0填充左移位 5 << 1 0101 << 1 10 1010 >> 有符号右移位 5 >> 1 0101 >> 1 2 0010 >>> 0填充右移位 5 >>> 1 0101 >>> 1 2 0010 上面的例子使用4位无符号的例子。但JavaScript使用32位的有符号数.
因为这个, 在JavaScript里面, ~ 5 将不返回 10. 它将返回 -6.
~00000000000000000000000000000101 将返回 11111111111111111111111111111010
按位与
按位与, 两个位都为1,则返回1.
一位实例:
操作 结果 0 & 0 0 0 & 1 0 1 & 0 0 1 & 1 1 4 位实例:
操作 结果 1111 & 0000 0000 1111 & 0001 0001 1111 & 0010 0010 1111 & 0100 0100
按位或
按位或, 有一个为1,就返回1:
1位实例:
操作 结果 0 | 0 0 0 | 1 1 1 | 0 1 1 | 1 1 4 位结果:
操作 结果 1111 | 0000 1111 1111 | 0001 1111 1111 | 0010 1111 1111 | 0100 1111
按位亦或
按位亦或, 如果两个不相同则返回1,否则返回0:
1位实例:
操作 结果 0 ^ 0 0 0 ^ 1 1 1 ^ 0 1 1 ^ 1 0 4 为实例:
操作 结果 1111 ^ 0000 1111 1111 ^ 0001 1110 1111 ^ 0010 1101 1111 ^ 0100 1011
JavaScript 位操作
JavaScript 按位运算在32位有符号整数.
运算中的任何数转换成32位有符号整数.
位运算结果转换为JavaScript数字.
JavaScript 按位与 (&)
按位与,两个位都为1,返回1:
数字 二进制 5 00000000000000000000000000000101 1 00000000000000000000000000000001 5 & 1 00000000000000000000000000000001 (1) var x = 5 & 1;
JavaScript 按位或 (|)
按位或,有一个为1,则返回1:
数字 二进制 5 00000000000000000000000000000101 1 00000000000000000000000000000001 5 | 1 00000000000000000000000000000101 (5) var x = 5 | 1;JavaScript 按位亦或 (^)
按位亦或,不相同返回1,否则返回0:
数字 二进制 5 00000000000000000000000000000101 1 00000000000000000000000000000001 5 ^ 1 00000000000000000000000000000100 (4) var x = 5 ^ 1;
JavaScript 按位取反 (~)
数字 二进制 5 00000000000000000000000000000101 ~5 11111111111111111111111111111010 (-6) var x = 5 ^ 1;
JavaScript 左移位 (<<)
这是零填充左移位. 一个或多个零位从右边移到左边,而左边的位删除:
数字 二进制 5 00000000000000000000000000000101 5 << 1 00000000000000000000000000001010 (10) var x = 5 << 1;
JavaScript 右移位 (>>)
这是一个有符号右移位。:
数字 二进制 -5 11111111111111111111111111111011 -5 >> 1 11111111111111111111111111111101 (-3) var x = -5 >> 1;
JavaScript (零填充) 右移位 (>>>)
(零填充) 右移位:
数字 二进制 5 00000000000000000000000000000101 5 >>> 1 00000000000000000000000000000010 (2) var x = 5 >>> 1;
32位有符号整数
只有一位集的32位整数易于理解:
二进制描述 数字 00000000000000000000000000000001 1 00000000000000000000000000000010 2 00000000000000000000000000000100 4 00000000000000000000000000001000 8 00000000000000000000000000010000 16 00000000000000000000000000100000 32 00000000000000000000000001000000 64 设置多个位显示二进制模式:
二进制表示 数字 00000000000000000000000000000101 5 (4 + 1) 00000000000000000000000000101000 40 (32 + 8) 00000000000000000000000000101101 45 (32 + 8 + 4 + 1) 负数存储在两个补码格式中。这意味着,一个负数位数不加1.
二进制表示 数值 00000000000000000000000000000101 5 11111111111111111111111111111011 -5 00000000000000000000000000101000 40 11111111111111111111111111011000 -40
十进制转换为二进制
function dec2bin(dec){ return (dec >>> 0).toString(2); }
二进制转换为十进制
function bin2dec(bin){ return parseInt(bin, 2).toString(10); }