C语言为什么语句while(!x)和while(~x) 不等价?
9个回答
展开全部
!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)不会退出循环。
用于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)不会退出循环。
展开全部
!是逻辑运算符取反 ~是位运算符取反 第一个是真值取反 第二个是对数值的二进制按位取反
!运算符的运算结果是 true变false false变true 比如:int a = 1; int b = !a; b中的值为0
~运算符的运算结果是一个数字的每一位二进制取反 比如~(01001001)2结果为(10110110)2
!运算符的运算结果是 true变false false变true 比如:int a = 1; int b = !a; b中的值为0
~运算符的运算结果是一个数字的每一位二进制取反 比如~(01001001)2结果为(10110110)2
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(!x) 与while( x==0 )相同
while( ~x ) 中~运算符表示按位取反 , 如0000001 取反结果为11111110,还是不为0,而00000001取非时,结果为00000000,所以,这两个是不同的!
while( ~x ) 中~运算符表示按位取反 , 如0000001 取反结果为11111110,还是不为0,而00000001取非时,结果为00000000,所以,这两个是不同的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
“ ! ”逻辑非运算符:!x运行结果只要x不是0,则其结果为0(假);如果0为0,则其结果为1(真)
“ ~ ”按位取反运算符:~x,按照x的二进制位取反,只有x的二进制是11111111(全1),则其结果为0(假),否则其结果一定不是0(真)
希望能够帮到你。
“ ~ ”按位取反运算符:~x,按照x的二进制位取反,只有x的二进制是11111111(全1),则其结果为0(假),否则其结果一定不是0(真)
希望能够帮到你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
!是逻辑运算符非,while(!x)就是x不等于0的时候循环条件成立。
~是位运算符号,取反,while(~x)的意思是,位x取反,循环恒成立的。
~是位运算符号,取反,while(~x)的意思是,位x取反,循环恒成立的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询