找回密码
 立即注册
查看: 606|回复: 5

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

[复制链接]

4

主题

11

回帖

48

积分

新手上路

积分
48
发表于 2023-12-19 17:39:32 | 显示全部楼层 |阅读模式
我写了一个宏定义:#define XXX (3*60*100)
然后进行了运算。a = XXX - b;
但是求出来的a值是异常的。我将(3*60*100)替换成180000就可以运算出正确的结果。
所以:STC8H3K32S2单片机的加减乘除运算默认是按照2字节来的?怎样才能计算超过2字节呢?例如long*long的运算。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-12-19 22:29:24 | 显示全部楼层
乘之前 强转一下试试
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-12-20 05:11:17 | 显示全部楼层
是的,  默认 int 类型,

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

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

否则 运算结果出错 !

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-12-20 05:18:23 | 显示全部楼层
#define XXX (3*60*100)

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


其他例子:

#define  Fosc  24
#define  OutFosc  24*1000000L / 12   // 定时器输出频率(Hz)

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2023-12-20 08:03:13 | 显示全部楼层
LAO*** 发表于 2023-12-20 05:18
#define XXX (3*60*100)

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

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

使用道具 举报 送花

4

主题

11

回帖

48

积分

新手上路

积分
48
发表于 2023-12-20 10:34:13 | 显示全部楼层
好的,谢谢大家解答!谢谢!
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 22:57 , Processed in 0.148720 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表