| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 333 人关注过本帖
标题:大家 5.1 快乐
只看楼主 加入收藏
booming1
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-5-7
结帖率:0
收藏
已结贴  问题点数:2 回复次数:5 
大家 5.1 快乐
大家5.1快乐


[ 本帖最后由 booming1 于 2014-5-7 21:36 编辑 ]
2014-05-07 20:23
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:1 
转自网上:
左移里一个比较特殊的情况是当左移的位数(>>32)超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:
int i = 1, j = 0x80000000; //设int为32位
i = i << 33; // 33 % 32 = 1 左移1位,i变成2
j = j << 33; // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃
在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.

总有那身价贱的人给作业贴回复完整的代码
2014-05-07 21:34
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
猜测:(我没这么蛋疼的写过代码,所以没深研究过)
nt b = a<<33;   //根据2样说的,编译器直接优化为a<<1了
int j=33;
int c = a<<j;   //这里没优化是因为j是变量,不是常数,编译器不知道运行时j会等于多少,所以会一直左移变成0

总有那身价贱的人给作业贴回复完整的代码
2014-05-07 21:38
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
楼主怎么把主题改了?

总有那身价贱的人给作业贴回复完整的代码
2014-05-07 21:40
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:1 
什么情况……


莫问前尘有愧,但求今生无悔
2014-05-07 23:35
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
回复 2 楼 embed_xuel
随手用c4droid试了下,

printf ("%d\n", 0b1<<33);

是0哦,也是gcc编译器的说,可能是版本或是设置的原因吧


莫问前尘有愧,但求今生无悔
2014-05-07 23:44
快速回复:大家 5.1 快乐
数据加载中...
 
   



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

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