注册 登录
编程论坛 C++教室

移位的问题

black423 发布于 2009-08-13 15:09, 425 次点击
unsigned long flag;
int i;
for(i=0;i<=30;i++)
  flag=0x01<<i;
我想问一下,为什么到i=15的时候就flag=FFFF8000了,这个时候应该是flag=00008000啊!
3 回复
#2
black4232009-08-13 15:19
问题已解决
unsigned long flag,mm=0x01;  
int i;  
for(i=0;i<=30;i++)  
  flag=mm<<i;  
这样结果就正确了 .
#3
xufen3402009-08-13 15:50
#include<iostream>
using namespace std;
int main()
{
unsigned long flag;
int i;
for(i=0;i<=30;i++) {
    if(i==15){
    flag=0x01<<i;
    cout<<"0x"<<hex<<flag;}
    else flag=0x01<<i;
 
}
return 0;
}
是0x8000啊,你可以看结果。
#4
black4232009-08-14 08:50
我用的是BC3.1,0x01被默认是int型的了,只能移15位,超过了就都变成0了,需要从新定义个unsigned long 型的参数.
1