【Javascript】有符号数、无符号数的移位操作
ECMA-262规范 移位操作章节对于Javascript移位操作来说,默认的左移<<和右移>>操作都是有符号数移位操作,于是有了二级制表示第31位为1的整数左移后结果成了负数、二进制表示第32位为1的整数右移后结果成了负数的情况
alert(2147483647<<1); // -2 alert(4294967294>>1); // -1
Javascript提供了无符号数的右移操作>>>;但没有无符号的左移操作,如需要可以先左移,然后无符号右移0位即可。因而对于上面的列子改为无符号移位如下:
alert(2147483647<<1 >>>0); // 4294967294 alert(4294967294>>>1); // 2147483647
于是也就有了有符号数和无符号数的转换方法:
var signed = -1; var unsigned = signed >>> 0; // >>> 0 转换为无符号数 alert(unsigned); signed = unsigned << 0; // << 0 转换为有符号数 alert(signed);
具体细节可以查看ECMA-262规范 移位操作章节(JavaScript 的正式名称是 "ECMAScript",其语法由ECMA-262规范描述)
标签: Javascript
还没有人抢沙发呢~