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位追问
u8 buf[1] = 0xFF,buf[0] = 0xFF;
temp = buf[1] << 8 + buf[0];
buf[1]左移八位 + buf[0] ,合并成一个16位追问
比如:buf[1]=3;buf[0]=2;
那么按照(((u16)buf[1]<<8)+buf[0])的结果是什么呢?
好吧 。。
比如
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进制运算 不知道楼主明白了没有
然后在将左移后的2进制数 转换成10进制运算 不知道楼主明白了没有
第4个回答 2021-03-21