标题:<< 和 ==的疑问
只看楼主
lyp_order
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-13
 问题点数:0 回复次数:2 
<< 和 ==的疑问

怎么来的

不是该是false?
搜索更多相关主题的帖子: false 
2013-03-13 10:48
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
这里有几个概念:
首先,运算符的先后顺序。
=号,为赋值符号,是最后执行的。
先看第一个图:
int a = 2008;
int c1 = a << 2;
int c2 = a >> 2;
<<号为位运算符号,操作对象是二进制,含义是整个二进制值左移,a << 2 表示 a的二进制左移2位。
那么首先a的值是10进制的2008,我们转换成二进制为11111011000
现在我们将这个值左移两位,实际上就是在值的最右边补上了两个0,变为1111101100000
因为c1是int型,那是十进制数,那么我们将1111101100000转回十进制,为8032
>>同理,右移符号,右移相当于把二进制最右边的直接去掉
11111011000 >> 2 后变为 111110110 ,转成十进制为502。

第二个图
c的值确实应该为false,为true是错误的
2013-03-13 13:35
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
补充说明:简便算法
>>符号对于十进制来说,相当于除号,除数为2
右移1位,相当于除以2,右移2位,相当于两次除以2
那么2008 >> 2,相当于 2008 除以 2 ,等于1004,再除以2,值为502
<<相当于乘以2
2008 << 2,相当于 2008 乘以2,等于4016,再乘以2,值为8032  
2013-03-13 13:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-400650-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.157240 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved