javascript - 无符号右移零位是什么意思?
问题描述
我需要将 Javascript 函数移植到 C++。在移植过程中,我发现了这行代码:
return (randseed[3]>>>0) / ((1 << 31)>>>0);
我的问题是:无符号右移零字节是什么意思???移位零字节有什么意义???什么相当于它的 C/C++?
这是我要移植的功能:
function rand() {
// based on Java's String.hashCode(), expanded to 4 32bit values
var t = randseed[0] ^ (randseed[0] << 11);
randseed[0] = randseed[1];
randseed[1] = randseed[2];
randseed[2] = randseed[3];
randseed[3] = (randseed[3] ^ (randseed[3] >> 19) ^ t ^ (t >> 8));
return (randseed[3]>>>0) / ((1 << 31)>>>0);
}
(来源:https ://github.com/ethereum/blockies/blob/master/blockies.js )
这是我当前的端口:
double_t Accounts::rand(int *rand_seed) {
int v1,v2;
v1=rand_seed[0];
v2=rand_seed[0] << 11;
int t=v1 ^ v2;
rand_seed[0]=rand_seed[1];
rand_seed[1]=rand_seed[2];
rand_seed[2]=rand_seed[3];
v1=rand_seed[3] >> 19;
v2=t>>8;
rand_seed[3]=rand_seed[3] ^ v1 ^ t ^ v2;
uint v=rand_seed[3];
uint d=1<<31;
double_t output=v / d;
return output;
}
也许有 C++ 知识的人可能会检查我是否正确地做到了?
我还在函数内添加了变量的打印输出,期望右移零字节产生不同的结果
var before,after
before=randseed[3]
after=(randseed[3]>>>0)
console.log('before='+before+', after='+after)
return (randseed[3]>>>0) / ((1 << 31)>>>0);
但console.log 显示没有区别:
before=1458668765, after=1458668765
before=1818856068, after=1818856068
before=622943643, after=622943643
解决方案
推荐阅读
- loops - Elixir 中的条件循环
- linux - Shell:如何根据每行的第一个单词提取第一个出现的位置?
- git - 当使用 Git 尝试 2 或 3 个解决方案时,我们必须使用 2 或 3 个分支进行提交,这是真的吗?
- php - 使用 formData 上传多个文件
- python-3.x - 如何将 pytest-html-reporter 生成的报告存储到自定义位置
- r - 从后面开始提取最后一组数字的更短方法
- reactjs - React 测试库:检查属性是否匹配正则表达式
- python - 使用基于 ctypes 的扩展安装 python 包的问题
- git - git push 有效,但不是 git push origin master
- tensorflow - Keras Tuner 从超参数搜索中返回验证损失