两个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条回答
jqfsjt
1楼-- · 2020-01-20 20:41
谁能从原理上解释下?
dr2001
2楼-- · 2020-01-20 22:27
jqfsjt 发表于 2015-11-21 10:17
谁能从原理上解释下?

查C语言的整形类型提升。

int << int 使用int类型计算,等赋值的时候long=int的时候才会类型提升。
long = (long) int << int这样的话,一个数强制类型,变成long << int,此时就正常了。
dongwang_fl
3楼-- · 2020-01-21 02:14
你的数据类型一个是有符号,一个是无符号,在这里的转换会出问题。
jqfsjt
4楼-- · 2020-01-21 06:39
dr2001 发表于 2015-11-21 10:32
查C语言的整形类型提升。

int

有相关的资料吗?或者能参考那本书?

一周热门 更多>