C语言 int i=21; i = i&(~((~0)<<3)) ; printf(%d,i); 问输出什么
展开全部
输出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了。
~是取反运算符,~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了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询