我正在将一些 32 位兼容代码转换为 64 位 - 我遇到了障碍。我正在编译一个 VS2008 x64 项目,我收到以下警告:
warning C4334: '<<' : result of 32-bit shift implicitly converted to 64 bits
(was 64-bit shift intended?)
这是原始代码行:
if ((j & (1 << k)) != 0) {
如果我遵循微软的建议,这就是它的样子:
if ((j & (1i64 << k)) != 0) {
当代码将在 32 位和 64 位系统上编译时,这样做安全吗?如果是这样,请解释为什么我必须在末尾添加“i64”,以及为什么这不会影响 32 位编译。否则,将不胜感激。
除此之外,我还有一些看起来更棘手的代码。
if (id[j] != id[j ^ (1u << k)]) {
我知道“u”表示该数字是无符号的,但是在不超过有符号最大值的值上指定它有什么意义......我猜这与位移有关?