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

 我来答
xshrim
2012-12-24 · TA获得超过2156个赞
知道小有建树答主
回答量:688
采纳率:66%
帮助的人:514万
展开全部
输出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了。
bluesatan521
2012-12-24 · TA获得超过105个赞
知道答主
回答量:49
采纳率:0%
帮助的人:26.6万
展开全部
输出的值为5
~为位逻辑运算符中的按位取饭。
int占用2个内存,16位
0为:0000000000000000
~0为:1111111111111111
<<为左移位运算符。将各二进制位全部向左移动三位。其余补零,溢出不管。
~0<<3:1111111111111000
继续算,继续按位取反。
~~0<<3:0000000000000111
&为按位与运算符。
21的二进制:0000000000010101
0000000000000111
所以运算结果。0000000000000101
所以结果为5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
day123tang
2012-12-24
知道答主
回答量:30
采纳率:0%
帮助的人:16.1万
展开全部
答案是 5
程序printf("%d", i);
忘了双引号 " "
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赚钱用户
2012-12-24
知道答主
回答量:23
采纳率:0%
帮助的人:11.2万
展开全部
这种问题自己运行就知道了啦
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
董不懂180
2012-12-24 · TA获得超过173个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:112万
展开全部
5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式