为什么 !0 等于 1 而不是 -1?
Why is !0 equal to 1 and not -1?
以下代码
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
被视为布尔值 true
?
原因是在标准 C 中,指定所有运算符 returning 布尔值 return 为 1 或 0。!0 计算 0 的逻辑非,即 1。 1 的逻辑非则为 0。
您要使用的是按位非运算符,即 ~0
应该是 0xFFFFFFFF == -1
.
以下代码
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
被视为布尔值 true
?
原因是在标准 C 中,指定所有运算符 returning 布尔值 return 为 1 或 0。!0 计算 0 的逻辑非,即 1。 1 的逻辑非则为 0。
您要使用的是按位非运算符,即 ~0
应该是 0xFFFFFFFF == -1
.