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

如题所述

!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)不会退出循环。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-25
!是逻辑运算符取反 ~是位运算符取反 第一个是真值取反 第二个是对数值的二进制按位取反
!运算符的运算结果是 true变false false变true 比如:int a = 1; int b = !a; b中的值为0
~运算符的运算结果是一个数字的每一位二进制取反 比如~(01001001)2结果为(10110110)2本回答被提问者采纳
第2个回答  2015-01-25
while(!x) 与while( x==0 )相同

while( ~x ) 中~运算符表示按位取反 , 如0000001 取反结果为11111110,还是不为0,而00000001取非时,结果为00000000,所以,这两个是不同的!
第3个回答  2015-01-25
“ ! ”逻辑非运算符:!x运行结果只要x不是0,则其结果为0(假);如果0为0,则其结果为1(真)

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

希望能够帮到你。
第4个回答  2015-01-25
!是逻辑运算符非,while(!x)就是x不等于0的时候循环条件成立。
~是位运算符号,取反,while(~x)的意思是,位x取反,循环恒成立的。

C语言为什么语句while(!x)和while(~x) 不等价?
!x和~x的计算规则不同,所以二者不能等价。用于while()条件时,当表达式结果为0,while退出,否则while继续循环。对于!x,只有当x为0时,表达式结果为真,while会继续循环;对于其它的值,!x的结果都是0,会退出循环。于是!x的真值就是 x = 0, !x=1 x!=0, !x=0 而对于~x,是按位取反。

while(! x)中的! x是否等价于X==0?
!是“逻辑非”操作符,所以!x就是给x取反。在C里,非0为“逻辑真”,用1表示,0是“逻辑假”;所以!x==0实质就是x!=0的意思。所以,while(!x==0)等效于while(x!=0),即当x不等于0时继续循环,一直循环到x变为0时结束。!x !x在c语言语句里面为一个运算,取非,也就是反意的意思...

C语言 while(!x);是什么意思?
C语言中的while(!x);是一个条件循环结构,其含义是当变量x的值为假(非零)时,循环体内的语句才会执行。这里的!是逻辑非运算符,它会取反x的值。具体来说,如果x不等于0,!x的结果为0,即假,此时循环不执行;如果x等于0,!x的结果为1,即真,循环体开始执行。与do-while循环不同,while循...

c语言中while(!
while(!x)后面有一个分号,表示该循环的循环体为空,即只做判断和循环,并不执行操作。!是反运算符,单目,!真 即 假,!假 即 真。如果x != 0, 则 !x 为 0,即假,如果x == 0,则 !x 为 真。while()是循环语句。while(expr)表示当逻辑表达式expr为真时,循环运行循环体,直到expr值...

c语言问题,那个while(!x)是啥意思,这个程序又是怎么回事
while(!x)等价于while(x == 0)printf(x--)是输出x,然后x再-- 那么就是输出23,然后x=22;在判断while(x==0)不成立,最后跳出循环,输出23

c语言中while(! x)的作用?
c语言“while(!x)”中的“!x”的意思是:变量x强制转化为布尔类型变量再取非。“!”是C语言中的非运算符,在变量前面使用它,会构建非运算表达式,表达式的返回结果是个布尔值(也就是只有true或false)。对变量使用时,如果变量不是布尔数据类型,将会强制转化为布尔类型再使用,如整形变量123将被...

...选择结构if(!x)m--和循环while(!x)是什么意思,假
if(!x),只要x为0,就会执行if后面的语句,如果x为非0的数,那就不能满足条件;while(!x),只要x为0,程序就会一直在执行while里面的语句,除非x变为非0,才会跳出while语句。

对于整型变量x,与while(!x)等价的为什么是while(x==0)?
!x,就是非x,非0就是真,非其他数字就是假。就是当x为0才成立。while语句的原型是while(表达式)语句,当表达式为非0值时,执行while语句中的嵌套语句。 那么while(1)其中1代表一个常量表达式,它永远不会等于0。所以,循环会一直执行下去;除非设置break等类似的跳出循环语句循环才会中止。while(...

C语言问题求解如图while(!x)是啥意思求解如图谢谢
while(!x),相当于while(x==0)因为当x==0时为假,!x为真

c语言中while(!x)的含义
while(!x)的含义 !x,就是非x,非0就是真,非其他数字就是假。就是当x为0才成立.例1 int i = 0, x = 0;while (!x && i < 3) {   x++;  i++;} printf("%d,%d", x, i)第一次判断!x(即x!=0)为真,循环while里x++,x=1。第二次判断!x(即x!

相似回答
大家正在搜