【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】有符号数、无符号数的移位操作
    标签:
    分享:

还没有人抢沙发呢~

无觅相关文章插件,快速提升流量