wgui 发表于 2013-1-23 00:40:18

为何用移位处理长整数据会错误?

我读取SD卡的信息时想计下SD卡的容量,我用1G的内存卡,以MB作单位显示。
扇区缓存用SDDATA;
unsigned long SD;
SD=(SDDATA*16777216+SDDATA*65536+SDDATA*256+SDDATA)/1024/2;
这样读取显示正常,值为942,即942MB。
而采用移位方法却不行,为何:
SD=((SDDATA<<24)|(SDDATA<<16)|(SDDATA<<8)|SDDATA)/1024/2;
结果是14,sizeof(SD)显示为4,是4字节呀,为何移位计算就不正确了呢?请高手帮解,小弟想不明白。谢谢!{:cry:}

dashashi 发表于 2013-1-23 00:56:33

在SDDATA到32之前加上强制类型转换(unsigned long),试试行不

wgui 发表于 2013-1-23 01:32:43

dashashi 发表于 2013-1-23 00:56 static/image/common/back.gif
在SDDATA到32之前加上强制类型转换(unsigned long),试试行不

可以了谢谢!{:loveliness:}
页: [1]
查看完整版本: 为何用移位处理长整数据会错误?