两个unsigned int 数据合成一个long 数据的问题

2020-01-19 19:33发布

unsigned char 数据<<8变成unsinged int 数据,这样操作可以。
unsinged char count_a,count_b;
unsinged int count;
Count =  count_a<<8|count_b;
但是如果是unsigned int 数据<<16位变成long 数据,这样操作不可以。
Long count ;
unsinged int count_a,count_b;
        count = count_a<< 16|count_b;
必须改成下面的才行
Long count ;
unsinged int count_a,count_b;
count = count_a;
count = count << 16|count_b;

谁知道原因,解释下。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
arm
1楼-- · 2020-01-19 23:30
 精彩回答 2  元偷偷看……
arm
2楼-- · 2020-01-20 02:28
keil C51的unsigned int是个字节的,count_a<<16就是0了
jqfsjt
3楼-- · 2020-01-20 07:20
嗯,这个明白,如果按照同样的道理推断上面的那个,就不合理了。
lw2012
4楼-- · 2020-01-20 09:25
本帖最后由 lw2012 于 2015-11-20 14:21 编辑

count =(long)(((ulong)count) << 16|count_b);
kinoko
5楼-- · 2020-01-20 13:30
union{
        struct{
                uint16 a;
                uint16 b;
        }s;
        uint32 dat;
}num;

num.s.a=count_a;
num.s.b=count_b;
count = num.dat;
这样呢?
bccuje_love
6楼-- · 2020-01-20 15:15
 精彩回答 2  元偷偷看……

一周热门 更多>