c - 64 位数字的 NOT 在 c 中给出错误结果

标签 c 64-bit bit-manipulation bit-shift

有两个数字 a 和 b,都是 64 位。

代码:

a = a|b;

如果(!(a&b)){ }

现在,在上述场景中,b 的第 34 位打开,而 a 的一些位打开。 因此,根据情况 !(a&b) 应该结果为 0,但代码进入了 if 循环,这是错误的。问题是 !(a&b) 给出的是 1 而不是 0。有什么原因吗?

最佳答案

因为您不想创建 SSCE ,我给你做了一个:

#include <stdio.h>

int main(void) {
    unsigned long long a = 42, b = 1ULL << 33;

    a = a|b;
    if(!(a&b))
        printf("!(a&b)\n");
    else
        printf("(a&b)\n");

    return 0;
}

并在ideone处运行它。它按预期输出 (a&b) 。您的问题不在于您向我们展示的代码。

关于c - 64 位数字的 NOT 在 c 中给出错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176601/

相关文章:

c - 如何使用 C 语言将 + 添加为字符串?

调用 CHL 函数,在 View 之外

c# - 在 'Any CPU' .NET 程序集上强制执行 x86 CLR

c - a >> ((sizeof a) * CHAR_BIT) 是定义的,UB 还是 IDB?

c - 使用 gcc 版本 4.3.3 构建 OpenSSL 1.1.1c 时出现问题

c - 程序获取 EXC_BAD_ACCESS

vba - 使用 VTable hacking 使用标准模块中的方法重载 COM 类方法

c++ - 从 64 位迁移到 32 位

java - 将字符串存储在 int 中

java,在单个操作中将前 3 位从一个字节传输到另一个字节