C语言中逻辑非运算符!的工作原理是什么?
C语言逻辑非运算符
!的工作机制解释 核心规则(C标准明确规定)
逻辑非运算符!的结果只有两个可能值:0 或者 1,和位翻转完全没关系:
- 当操作数是非零值时,
!的结果为0 - 当操作数是0时,
!的结果为1
对应你的代码示例分析
第一个代码中:
!(-76)里的-76是非零值,所以结果为0,if(0)属于假分支,不会执行printf;同理!(2)结果也是0,第二个if同样不执行,所以程序没有任何输出。第二个测试代码:
!4因为4是非零值,结果直接是0,所以x的值是0,printf("%d", x)自然输出0。
关于"位翻转"的误区
如果是翻转所有位的话,4的二进制(以32位int为例)是00000000 00000000 00000000 00000100,翻转后会变成11111111 11111111 11111111 11111011,对应补码的-5,但实际输出是0,显然这种猜测不成立。编译器是直接按照C标准的规则来处理!运算,不需要做位翻转操作。
内容的提问来源于stack exchange,提问作者coco
相关产品推荐
相关产品推荐

