2 l653423909 l653423909 于 2017.01.11 10:54 提问

c++ 中 0xffffffff >> 32 为什么是 0xffffffff 而不是0?

代码如下:
unsigned long ga = 0xffffffff;
printf("%x %x",ga >> 32,ga >> 31);
无符号右移应该补零啊,右移31位的时候值是1,那么再移一次应该就是0了啊,为什么又是0xffffffff了呢?
难道是我基础不牢固......
各位大神来看看吧,多谢赐教!

5个回答

justin_bkdrong
justin_bkdrong   2017.01.11 11:24

因为 ga >> 32 , 这个32 超出了 shr 的操作数的范围,所以此操作无效, shr dest,count 执行以后 dest 不变 ,所以还是 0xffffffff

alfredseng
alfredseng   2017.01.11 12:00

当移动的位数大于或等于该数据类型位数时,这个时候移动的位数是要进行一个取余的运算,即实际移动位数=N%32。
比如你上面右移32位,32等于数据类型的位数了,则采用取余运算,右移0位,假如你右移33位,则实际上是右移一位。同理你左移65位,实际上相当于左移1位

Ro_bot
Ro_bot   2017.01.11 12:53

不就是带符号右移么,也就是说,符号位1(负)右移,填充的还是1(负)。如果不想填充1(负),那就使用>>>无符号右移。

shen_wei
shen_wei   Ds   Rxr 2017.01.11 17:10
  warning C4293: “>>”: Shift 计数为负或过大,其行为未定义

    cout<<((UINT64)ga >> 32)<<" " <<(ga >> 31);     

在调试状态下是可以看到为零的,但是输出时,因为符号位的问题。。如果把输出扩大即可正确输出0

u012061345
u012061345   2017.01.12 17:55

移位运算要移动的位数超过了限制,是未定义行为。不要推测结果是多少。结果是多少都不对。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#超市管理系统[0xffffffff]
这个是我用C#制作的超市管理系统,为了方便大家学习,此程序的源码部分几乎每句代码都有相应的注释!里面也有自己研究的一个不可逆加密技术【MD5不可逆加密算法的改进版】MD5加盐加密2.0技术[到今天截止已经升级到2.1版本,如果需要此插件可以加我QQ:1556680382]
C语言实现的CRC32源码
CRC32 C实例代码 //*********************************************** DWORD CCrc32Static::StringCrc32(LPCTSTR szString, DWORD &dwCrc32) { _ASSERTE(szString); DWORD dwErrorCode = NO_ERROR; dwCrc32 = 0xFFFFFFFF; try { while(*szString != _T('\0')) { CalcCrc32((BYTE)*szString, dwCrc32); szString++; } } catch(...) { // An unknown exception happened dwErrorCode = ERROR_CRC; } dwCrc32 = ~dwCrc32; return dwErrorCode; }
mapwindow mapwingis开发实例 地图添加marker标记
mapwindow是一个GIS的开源项目,提供了mapwingis的gis二次开发组件,本实例基于mapwingis组件进行的简单的地图标记开发。附有详细的中文注解,希望能给mapwingis的学习提供一定的帮助。
C#系列--枚举类型与位标志学习心得
经常有人问下面的问题,就是在GridView的RowDataBound事件中,判断是否是EditItemTemplate里的控件为什么是 if ((e.Row.RowState & DataControlRowState.Edit) != 0) 而不是 if (e.Row.RowState == DataControlRowState.Edit)
linux eth0问题(复制虚拟机后eth0变成eth1或其他)
当克隆或者重装虚拟机后,再启动系统时会发现系统下不再有eth0,而变成了eth1,每次拷贝都会加1.此文档是怎么修改成eth0
MFCC LPCC 语音识别
MFCC LPCC 语音识别
Ghost映像文件浏览器
ghost镜像查看修改、提取,很好用的镜像查看提取工具! 还有一个windows(32位系统)下用的ghost工具
mybatis自动生成代码jar包
mybatis自动生成代码jar包。虽然很想免费共享给大家,但不知道为什么资源分最小是1而不是0了,所以勉强收1分吧。
安装PGP后不要重启(否则请重新安装吧),直接用注册机Patch,重启后再输入生成的注册码
安装PGP后不要重启(否则请重新安装吧),直接用注册机Patch,重启后再输入生成的注册码
office word2007新建doc格式而不是docx的方法
安装2007后,右键新建总是 docx的文件,需要打开word后在另存为doc文件,感觉很麻烦,所以在网上收集到的一个办法,试过,管用,分享给大家