首页
社区
课程
招聘
[求助]关于乘法指令的求助
发表于: 2012-11-8 15:13 17351

[求助]关于乘法指令的求助

2012-11-8 15:13
17351
问一下,C++的乘法运算中,当乘数是2的幂次时,可以使用shl对代码进行优化。shl指令(对给定的目的操作数左移N次,每次移位时最高位移入标志位CF中)。但是,我觉得不能使用shl指令,因为移位时没有对符号位进行保存,因此最高位在移位的过程中时可变的。如int a=3,a左移30位后,希望的结果是正数,但我看到的结果是负数-1073741824。(我电脑上int 占32位使用的是vc6),难道使用shl真的不对吗?还是有什么限制?谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 442
活跃值: (107)
能力值: ( LV9,RANK:350 )
在线值:
发帖
回帖
粉丝
2
3<<30 = 0xc000_0000

~0xc000_0000 +1 = 1,073,741,824

所以 C000_0000 = - 1,073,741,824
2012-11-8 15:53
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
决定有符号数和无符号数靠指令
2012-11-8 16:24
0
雪    币: 2993
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
int 默認是 signed int, 所以int a=3這個a佔用了32bit.
現在你要把一個32bit的數 左移30bit 得到一個62bit的數 存到原來的int a(只有32bit)當中
當然會出錯

如果是unsigned int a=3 就不會有這個問題了,因為unsigned 可以看成沒有符號位,也就是實際上存儲這個“3”只用了2bit, 左移30bit 得到一個32bit的無符號數,還可以放回原來的int a當中
2012-11-8 18:10
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
嗯,知道了,谢谢!是我的一位后数据影响了符号位,运算值超过了2的31次方减-1.
2012-11-8 22:07
0
游客
登录 | 注册 方可回帖
返回
//