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

 我来答
风若远去何人留
2015-12-10 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450113
专业C/C++软件开发

向TA提问 私信TA
展开全部
!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)不会退出循环。
Shiro灬
2015-01-25
知道答主
回答量:7
采纳率:0%
帮助的人:11万
展开全部
!是逻辑运算符取反 ~是位运算符取反 第一个是真值取反 第二个是对数值的二进制按位取反
!运算符的运算结果是 true变false false变true 比如:int a = 1; int b = !a; b中的值为0
~运算符的运算结果是一个数字的每一位二进制取反 比如~(01001001)2结果为(10110110)2
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2015-01-25 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6320万
展开全部
while(!x) 与while( x==0 )相同

while( ~x ) 中~运算符表示按位取反 , 如0000001 取反结果为11111110,还是不为0,而00000001取非时,结果为00000000,所以,这两个是不同的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丕屰教育
2015-01-25 · 超过88用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:133万
展开全部
“ ! ”逻辑非运算符:!x运行结果只要x不是0,则其结果为0(假);如果0为0,则其结果为1(真)

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

希望能够帮到你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Luck3192
2015-01-25 · TA获得超过1141个赞
知道小有建树答主
回答量:497
采纳率:100%
帮助的人:387万
展开全部
!是逻辑运算符非,while(!x)就是x不等于0的时候循环条件成立。
~是位运算符号,取反,while(~x)的意思是,位x取反,循环恒成立的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式