二进制值加起来不正确
Binary values don't add up correctly
我正在尝试用c++编写SHA-1的实现。但出于某种原因,我不能让它工作。两个值不能正确相加
我使用这个链接来检查输入test
的SHA-1步骤
在函数的第一轮(对于word 0)中,我的代码示例如下:
#define LEFTROTATE(x, c) (((x) << (c)) | ((x) >> (32 - (c))))
a = 0xefcdab89;
b = 0x98badcfe;
c = 0x10325476;
d = 0xc3d2e1f0;
f = (b & c) | (d & (~b));
cout << LEFTROTATE(a, 5); // equal to 3903086636 (11101000101001000110000000101100)
cout << f; // equal to 2562383102 (10011000101110101101110011111110)
我想把这两个值加起来得到LEFTROTATE(a, 5) + f
,但我得到以下结果:
cout << LEFTROTATE(a, 5) + f; // equal to 2170502442 (10000001010111110011110100101010)
从3903086636 + 2562383102 = 6465469738
开始,我期望输出是6465469738 (110000001010111110011110100101010)
。
这是正常和预期的。SHA1中使用的加法定义为加法模232,这是在添加32位位向量时自然发生的。没有第33位,所以不能设置。
链接页面显示了一些额外的位,但这本质上只是为了显示。它们不影响结果,在这些额外的位有机会影响任何东西之前,它们在该页上被显式地截断了。
实际上这些位本来就不存在,因为截断是隐式的。
变量的类型是什么?如果您使用unsigned int
,它们将溢出。考虑使用或强制转换为unsigned long long
或uint64_t
。
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- 为什么除非我使用 cout,否则我的值不正确?
- 计算幂级数的数学结果不正确
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 二进制值加起来不正确