C语言为什么语句while(!x)和while(~x) 不等价?

2025-03-21 01:37:02
推荐回答(5个)
回答1:

!x和~x的计算规则不同,所以二者不能等价。

用于while()条件时,当表达式结果为0,while退出,否则while继续循环。

对于!x,只有当x为0时,表达式结果为真,while会继续循环;对于其它的值,!x的结果都是0,会退出循环。
于是!x的真值就是
x = 0, !x=1
x!=0, !x=0

而对于~x,是按位取反。
所以,只有当x的每位均为1时,结果为0。其它x值的运算结果均非0.
于是~x的真值为
x的每位全为1, ~x为0.
x的任意一位不为1,~x为非0值。

举例来说,当x=1时,!x为0,while(!x)会退出循环。
而x=1时,~x结果与x类型相关,但一定不为0,这时while(~x)不会退出循环。

回答2:

!是逻辑运算符取反 ~是位运算符取反 第一个是真值取反 第二个是对数值的二进制按位取反
!运算符的运算结果是 true变false false变true 比如:int a = 1; int b = !a; b中的值为0
~运算符的运算结果是一个数字的每一位二进制取反 比如~(01001001)2结果为(10110110)2

回答3:

while(!x) 与while( x==0 )相同

while( ~x ) 中~运算符表示按位取反 , 如0000001 取反结果为11111110,还是不为0,而00000001取非时,结果为00000000,所以,这两个是不同的!

回答4:

“ ! ”逻辑非运算符:!x运行结果只要x不是0,则其结果为0(假);如果0为0,则其结果为1(真)

“ ~ ”按位取反运算符:~x,按照x的二进制位取反,只有x的二进制是11111111(全1),则其结果为0(假),否则其结果一定不是0(真)

希望能够帮到你。

回答5:

!是逻辑运算符非,while(!x)就是x不等于0的时候循环条件成立。
~是位运算符号,取反,while(~x)的意思是,位x取反,循环恒成立的。