gpt4 book ai didi

c - 为什么 !0 等于 1 而不是 -1?

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:34 24 4
gpt4 key购买 nike

下面的代码

printf("!%d = %d\n", 0, !0);
printf("!%d = %d\n", 1, !1);
printf("!%d = %d\n", -1, !-1);

给予

!0 = 1
!1 = 0
!-1 = 0

现在,考虑到 0 = 0x00000000,不应该 !0 = 0xFFFFFFFF = -1(用于签名表示)吗?这搞砸了在位域中使用 int/long 并立即反转所有内容。

这背后的原因是什么?是否只是为了避免 !1 被视为 bool 值 true

最佳答案

原因是在标准 C 中,已经指定所有返回 bool 值的运算符返回 1 或 0。!0 计算 0 的逻辑非,即 1。1 的逻辑非则为 0。

您要使用的是按位非运算符,即 ~0 应该是 0xFFFFFFFF == -1

关于c - 为什么 !0 等于 1 而不是 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com