【发布时间】:2018-09-25 20:48:24
【问题描述】:
我正在从程序员的角度阅读计算机系统,我正在研究逻辑运算符,它们类似于位运算符,但有一些区别。
我想不通的是,当你有一个逻辑操作数时!0x00 返回 0x01 而不是 0x11?
!是不正确的?所以 NOT 0(false) 应该是 1(true) 而另一个 NOT 0(false) 也应该是 1(true) 对吧?
我看一下位运算符示例:~00,自然会返回 11,但 C 的逻辑运算符似乎有很大的不同。
为什么会这样?
我已经尝试过的:进一步阅读以找到我寻求的答案,它似乎不在这里。
我认为问题在于:可能与十六进制的工作方式有关?但是,十六进制仍然可以有 0x11。 . . .
【问题讨论】:
-
它被评估为一个布尔值。
0为假,1为真。那么!false必须是true。 -
不要将
!(逻辑否定;产生0[false] 或1[true])与~(按位否定)混淆。 -
即使认为 if 语句会将零值视为 false 并将其他任何值视为 true,逻辑运算符如 &&、||、、=、==、! , 和 != 评估为 1 为真,为 0 为假,无论是否传递了某个非真值或其他任何值
-
为什么会返回 0x11?你的意思是 0xff?
-
啊,我明白了。零的数量对操作员来说并不重要。把它们想象成十进制的左填充零——0005 仍然只有 5。所以当你给它 0x00 时,它只会看到 0 并返回 1。
标签: c