打印

c语言类型是这样子用的吗?

[复制链接]
1293|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjswuyunbo|  楼主 | 2010-1-27 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是代码。
unsigned char buf[4];
return (unsigned long)(((unsigned long)buf[0])|((unsigned long)buf[1]<<7)|((unsigned long)buf[2]<<14)|((unsigned long)buf[3]<<21));
以上可以正确的得到结果。
可是
return (unsigned long)(((unsigned long)buf[0])|((unsigned long)buf[1]<<7)|((unsigned long)buf[2]<<14)|((buf[3]<<21));
却不行。

难道要每个数都要强制进行类型转换吗?好麻烦。。。
我一直以为:同一句话,只要强制转换其中一个变量,其他的会自动提升类型。。。。

相关帖子

沙发
McuPlayer| | 2010-1-27 11:32 | 只看该作者
Q:每个数都要强制进行类型转换吗?
A:是的,吃了早餐并不意味着我们可以不吃午餐也不饿

另建议,用短的句子来处理,会有更好的可读性,并且生成的代码也未必会变胖。

使用特权

评论回复
板凳
xinzha| | 2010-1-27 14:23 | 只看该作者
最好是加,即使有的编译器自动做转换,也还是加了的好,对你的代码风格和通用性有好处。

使用特权

评论回复
地板
efen| | 2010-1-27 17:29 | 只看该作者
本帖最后由 efen 于 2010-1-27 17:31 编辑

LZ试试共用体
union  
{
     unsigned long LONG  ;
     unsigned char buf[4];
}Data ;

return Data.LONG ;

使用特权

评论回复
5
McuPlayer| | 2010-1-27 18:02 | 只看该作者
楼主那个像是ASC码进行紧凑的,不是简单字节首位相连

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

163

主题

1578

帖子

1

粉丝