水水水木木木 发表于 2023-12-19 17:39:32

STC单片机的加减乘除运算是2字节吗?

我写了一个宏定义:#define XXX (3*60*100)
然后进行了运算。a = XXX - b;
但是求出来的a值是异常的。我将(3*60*100)替换成180000就可以运算出正确的结果。
所以:STC8H3K32S2单片机的加减乘除运算默认是按照2字节来的?怎样才能计算超过2字节呢?例如long*long的运算。

gentleman 发表于 2023-12-19 22:29:24

乘之前 强转一下试试

LAOXU 发表于 2023-12-20 05:11:17

是的,默认 int 类型,

如 数据运算 溢出 (超出使用范围) , 请在 数字后加 L 或 l

将 默认 int 类型, 强致 转换 成 long 类型 进行运算        .

否则 运算结果出错 !

LAOXU 发表于 2023-12-20 05:18:23

#define XXX (3*60*100)

改成 : #define XXX (3*60*100L) 即可


其他例子:

#defineFosc24
#defineOutFosc24*1000000L / 12   // 定时器输出频率(Hz)

当然, 初学者为求保险, 所有数字后面都加L 或 l (大小写都可), 也可.

daw85 发表于 2023-12-20 08:03:13

LAOXU 发表于 2023-12-20 05:18
#define XXX (3*60*100)

改成 : #define XXX (3*60*100L) 即可


看到你这么回复,终于有点明白为何例程中老是在MainFosc的数字后面加L了

水水水木木木 发表于 2023-12-20 10:34:13

好的,谢谢大家解答!谢谢!
页: [1]
查看完整版本: STC单片机的加减乘除运算是2字节吗?