请选择 进入手机版 | 继续访问电脑版

C++编程

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1545|回复: 0

VC MFC中4字节无符号右移32位问题解决方法

[复制链接]

8

主题

31

帖子

323

积分

版主

Rank: 7Rank: 7Rank: 7

积分
323
QQ
发表于 2017-3-30 15:09:22 | 显示全部楼层 |阅读模式
最近在开发中,碰到一个奇怪的现象,一个 unsigned long变量右移32位后,又变回了原来的值,造成了死循环的错。
代码片段如下
  1. UINT count = 0;
  2.         while ((dwVidMemTotal >> count) != 0x0) {
  3.           count++;
  4.         }
  5.         dwVidMemTotal = (1 << count);
复制代码

其中 dwVidMemTotal 当前值为 0xbafb0001   

运行以上代码后,会一直死循环,最后调试发现,移到32位后,变回了0xbafb0001  

解决方法、

  1. while ((unsigned long)((unsigned long long )dwVidMemTotal >> count)  != 0x0) {
复制代码


将dwVidMemTotal强转成unsigned long long 去实现右移,这样汇编代码将使用64位的逻辑右移指令。


VC纵横、磐实编程网
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|C++编程  

GMT+8, 2019-7-22 20:24 , Processed in 0.093750 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表