先来看C++里面关于位移的操作:
- #include <QCoreApplication>
- #include <QDebug>
-
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
-
- qDebug() << "1000 >> 0: " << (1000 >> 0);
- qDebug() << "-1000 >> 0: " << (-1000 >> 0);
- qDebug() << "(-1000) >> 0: " << ((-1000) >> 0);
- qDebug() << "1 - 1000 >> 0: " << (1 - 1000 >> 0);
-
- uint value = -1000;
- qDebug() << "-1000: " << value;
- qDebug() << "-1000 >> 0: " << (value >> 0);
-
- return a.exec();
- }
运行截图如下:
可见位运算的优先级不高。在C++中无符号数赋值是这样的。4294966296对应的二进制是这样的:
1111 1111 1111 1111 1111 1100 0001 1000
在JS中没有无符号数的概念,使用
let n = 6 - data.length >>> 0
这个的含义就是先算6 - data.length,然后将其转换为无符号数。