请教C语音隐形转换问题

2020-01-12 17:26发布

如:
unsigned char data1=0x12;
unsigned long data2=0x34;

data2=data1<<8;

data2此时的值为?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
dukelec
1楼-- · 2020-01-12 18:19
要看 cpu 和编译器,譬如 stm8 就要明转为 long 否则超出 8 bit 数据丢失,如果是 PC 或 STM32 则不会丢。基本上是 CPU 位宽以内隐转即可。
TANK99
2楼-- · 2020-01-12 21:32
 精彩回答 2  元偷偷看……
jxcrgt35
3楼-- · 2020-01-12 22:20
本帖最后由 jxcrgt35 于 2019-7-13 19:46 编辑
dukelec 发表于 2019-7-13 19:37
要看 cpu 和编译器,譬如 stm8 就要明转为 long 否则超出 8 bit 数据丢失,如果是 PC 或 STM32 则不会丢。 ...


应该是这样?觉得你说的对,和编译器有关。原觉得是隐形转换的
data2=(unsigned long )data1<<8;
lcofjp
4楼-- · 2020-01-12 23:02
本帖最后由 lcofjp 于 2019-7-13 22:19 编辑

data1是unsigned char类型,但是整型运算至少会转成int再进行运算,因此结果也是个int型,0x1200应该就是这个结果
dukelec
5楼-- · 2020-01-12 23:30
jxcrgt35 发表于 2019-7-13 19:45
应该是这样?觉得你说的对,和编译器有关。原觉得是隐形转换的
data2=(unsigned long )data1 ...

是的,反正 stm8 用 iar 编译,不明转会丢数据。印象深刻。
lb0857
6楼-- · 2020-01-13 04:36
编译器大有关系

一周热门 更多>