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

32G8K64是否可以进行64位整型的运算

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-22 08:36:40
已绑定手机

2

主题

1

回帖

16

积分

新手上路

积分
16
发表于 2025-7-21 14:47:35 | 显示全部楼层 |阅读模式
项目中遇到两个数相乘结果超过2的32次方,
开始用的double变量计算,但计算出来的结果不对(不知道什么原因),
想请教下该单片机是否可以支持64位整型的运算。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-21 15:16:36 | 显示全部楼层
和单片机无关,取决于编译器
看Keil的帮助文档
截图202507211516134748.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-21 15:22:12 | 显示全部楼层
支持
用#pragma float64启用
截图202507211521507215.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-07-25 11:00:25

28

主题

1081

回帖

4188

积分

超级版主

积分
4188
发表于 2025-7-21 16:05:04 | 显示全部楼层
目前最新版本的Keil软件
C251编译器:
支持32位整形,使用long关键字定义32位整形变量
支持单精度浮点,使用float关键字定义单精度浮点变量
支持双精度浮点,使用double关键字定义双精度浮点变量,必须使用“#pragma float64”开关打开双精度,
否则double也是定义的单精度变量
不支持64位整形

如下图:
截图202507211600459764.jpg

C51编译器:
支持32位整形,使用long关键字定义32位整形变量
支持单精度浮点,使用float关键字定义单精度浮点变量,使用double也只能定义单精度浮点变量
不支持64位整形
不支持双精度浮点(C51编译器不支持float64开关)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:532
  • 最近打卡:2025-07-31 14:15:17
已绑定手机
已实名认证

116

主题

2499

回帖

6450

积分

版主

积分
6450
发表于 2025-7-21 16:34:39 | 显示全部楼层
对于大数计算,常见的有数据拼接法和字符串法
字符串法就是将大数作为一个字符串来进行存储,计算时通过模拟手工计算乘法来实现的
拼接法就是将大数切割分成多个可以计算的小数字,分别计算完成后,再统一进行拼接的算法


例如C251和C51都不支持32位乘法产生的64位结果
这里给出一个测试通过的,32位long乘以32位long得到64位结果的程序
64位结果分别存储在两个long中,代表64位结果的高32位和低32位



可以看到结果与计算器计算结果一致,可以正常使用


以下是经过测试的工程文件:在STC32G实验箱V9.62通过测试,测试方式为USB仿真查看变量计算结果

32位数据类型模拟计算更高位数.zip (30.36 KB, 下载次数: 2)
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 01:51 , Processed in 0.123130 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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