!
和~
相同点:都不会改名变量原来的值。
!
和~
的区别:!
表示逻辑非,~
表示二进制(补码)按位取反,取反包含符号位 。另外~
只能对整数进行操作,而!
可以对浮点数进行操作。!
对浮点数进行操作时,即对于非零的浮点数取逻辑非,用%d
进行打印结果是0
,用%f
进行打印结果是0.000000
(由int -> float的转变),这个结果在while循环中被认为是假,一段代码为证:
个人猜测
:C语言真假的判断是根据内存中某一个块来定的,只要这个内存块中存储的全0,则为假;否则为真
另外要明确两点:
- 在C语言中,0为假,非0为真。在VS2015中,默认的真为1,假为0,由以下代码可以看到对非1的
真数
两次取逻辑反后结果为1。 - 计算机内存中存放的数字以二进制补码的形式存储
❄一段有趣的代码❄
Link操作符详解