51单片机c语言计算两个unsigned int型数据的乘积结果髙两位溢出丢失(乘积的数据类型是unsigned long)

如 0x7fc * 0x7fc = 0x3fc010 结果出来的是0xc010
2024-12-03 04:10:11
推荐回答(2个)
回答1:

你把其中一个变量先放进 长整形变量中(数据类型是unsigned long), 就不会出现结果是整形了

回答2:

typedef unsigned long u32;
typedef unsigned int u16;
typedef unsigned char u8;

u32 s;
u16 a,b;
a = 0x7fc;
b = a;
s = a*b;
这样做即可,以后在单片机中这样定义简化代码,易于读懂。
可追问,数据溢出是一个比较麻烦的事情,有的时候需要分很多步去解决。