C语言 int i=21; i = i&(~((~0)<<3)) ; printf(%d,i); 问输出什么

 我来答
盍书蛮晓彤
2019-07-09 · TA获得超过3881个赞
知道大有可为答主
回答量:3235
采纳率:26%
帮助的人:199万
展开全部
输出5。具体是这样的:
~是取反运算符,~0就表示对0取反,0的二进制表示是0000000。(int型是16位,本来是16个1的,这里就用7个表示一下,下同)对0取反就成了1111111
。(对应十进制-1)
<<是位移运算符,<<3就表示把前面的数的二进制位左移3位,根据移位规则,1111111左移3位就成了1111000了。
(对应十进制-8)
然后再对1111000取反,就成了0000111了。(对应十进制7)
到这里已经求得(~((~0)<<3))就是0000111了。
================================================
&表示按位与。i
&
0000111就是:
0010101
->
i=21
0000111
->(~((~0)<<3))=7
---------------------------------
0000101
->5
因此,最后的结果就是5了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式