【发布时间】:2015-03-19 13:41:29
【问题描述】:
我今天在审查 C 中的 SHA1 实现时遇到了一些相当有趣的代码。
temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1];
temp &= 0xFFFFFFFF;
我觉得有趣的部分是temp &= 0xFFFFFFFF;。请注意,temp 已被声明为 无符号整数。这个操作不会没有效果吗?我唯一能想到的是设计者试图强制使用 32 位整数,但这不会在编译时完成吗?
我很想知道人们的想法。
【问题讨论】:
-
temp的确切类型是什么? -
在某些机器上,
int(或unsigned int)可能是 64 位类型。掩码在int是 32 位类型的机器上是无操作的,但在它是 64 位类型的机器上是关键的。当它没有做任何有用的事情时,编译器会知道并优化操作。
标签: c sha1 bitwise-operators