C语言移位问题

xxb249 2012-10-12 11:11:42
#include <stdio.h>
int main()
{
int aa = 10;
int bb = aa >> 32;
printf("aa = %d,bb = %d\n",aa,bb);
return 0;
}

输出结果:aa = 10,b = 10

aa 的二进制 0000 0000 0000 0000 0000 0000 0000 1010
aa右移32位,那么应该是全0啊 bb应该输出0 为什么是10
...全文
185 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏天__ 2012-10-12
  • 打赏
  • 举报
回复
要移动32位以上的,使用数组移位;

开辟一段连续的整形空间,如int a[10];
全部初始化为0;
把段连续的空间当成是一个数,即:
将最后一个数(a[9])当最低位,
将最前一个数(a[0])当最高位,
每次左移时将整个数组里的每一个数全部左移相同的位数

只是这个数我们无法像读一个整数一样读出来,
但我们可以从a[0]开始一个一个的在屏幕上显示出来,
在屏幕上能当成一个数来读
lin5161678 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

使用gcc编译出现错误:
[root@bogon temp]# gcc -g -o t1 t1.c
t1.c: In function ‘main’:
t1.c:21: warning: right shift count >= width of type

[/Quote]
警告就警告 不是错误
那是ERROR
lin5161678 2012-10-12
  • 打赏
  • 举报
回复
依稀记得 左移右移太多结果是未定义的
lin5161678 2012-10-12
  • 打赏
  • 举报
回复
int的大小和编译器有关 和操作系统无关
夏天__ 2012-10-12
  • 打赏
  • 举报
回复
使用gcc编译出现错误:
[root@bogon temp]# gcc -g -o t1 t1.c
t1.c: In function ‘main’:
t1.c:21: warning: right shift count >= width of type

右移数据大于等于类型长度。

不要出现无法预测结果的表达式。
cyshuxin 2012-10-12
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20041016/03/3461265.html
xxb249 2012-10-12
  • 打赏
  • 举报
回复
还有一个问题为什么,64位机下 sizeof(int) = 4而不是8
xxb249 2012-10-12
  • 打赏
  • 举报
回复
自己顶下,貌似编译器,认为你这样做,无意义。移动32位,相当于把变量置0,
所以编译器没有进行移位

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧