C语言,类型转换

u8 buf[6];

short *x;

*x=(short)(((u16)buf[1]<<8)+buf[0]); 我的理解是,buf[1]被转换为u16类型,然后左移8位,而后和buf[0]相加,最后再强制转换为short类型。。我不理解的是,(u16)buf[1]左移8位后的结果是什么?那它究竟如何与buf[0]相加的。

麻烦大家给指点指点,最后能举个简单的例子。。
万分感谢。。

第1个回答  2013-12-02
buf[1] 是高八位 ,buf[0] 低八位
buf[1]左移八位 + buf[0] ,合并成一个16位追问

比如:buf[1]=3;buf[0]=2;

那么按照(((u16)buf[1]<<8)+buf[0])的结果是什么呢?

追答

好吧 。。

比如


short temp;
u8 buf[1] = 0xFF,buf[0] = 0xFF;
temp = buf[1] << 8 + buf[0];

把buf[1] 强制转换成 (u16)16位 事实上没有必要!gcc亲测~

 结果是  65535 (0xFFFF)

再详细点  buf[1] << 8 = 0XFF00;

                0xFF00 + 0xFF = 0xFFFF;

                

本回答被提问者采纳
第2个回答  2013-12-02

左移8位相当于乘以256

typedef unsigned char u8;
typedef unsigned short u16;

int main()
{

u8 buf[6];
short ww;
short *x;

x=&ww;
buf[0] = buf[1] = 1;

*x=(short)(((u16)buf[1]<<8)+buf[0]); 

printf("%d\n",ww);

}

第3个回答  2013-12-02
左移 代表将要左移的数转换成2进制 比如 00001 左移一位就成了00010 左移两位就是00100
然后在将左移后的2进制数 转换成10进制运算 不知道楼主明白了没有
第4个回答  2021-03-21

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网