linhaishenhuxi 发表于 2025-7-21 14:47:35

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

项目中遇到两个数相乘结果超过2的32次方,
开始用的double变量计算,但计算出来的结果不对(不知道什么原因),
想请教下该单片机是否可以支持64位整型的运算。

DebugLab 发表于 2025-7-21 15:16:36

和单片机无关,取决于编译器
看Keil的帮助文档


DebugLab 发表于 2025-7-21 15:22:12

支持
用#pragma float64启用


zhp 发表于 2025-7-21 16:05:04

目前最新版本的Keil软件
C251编译器:
支持32位整形,使用long关键字定义32位整形变量
支持单精度浮点,使用float关键字定义单精度浮点变量
支持双精度浮点,使用double关键字定义双精度浮点变量,必须使用“#pragma float64”开关打开双精度,
否则double也是定义的单精度变量
不支持64位整形

如下图:


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



王昱顺 发表于 2025-7-21 16:34:39

对于大数计算,常见的有数据拼接法和字符串法
字符串法就是将大数作为一个字符串来进行存储,计算时通过模拟手工计算乘法来实现的
拼接法就是将大数切割分成多个可以计算的小数字,分别计算完成后,再统一进行拼接的算法


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


https://www.stcaimcu.com/data/attachment/forum/202507/21/163115npxyw7oxe7lswgl7.jpg
可以看到结果与计算器计算结果一致,可以正常使用


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


页: [1]
查看完整版本: 32G8K64是否可以进行64位整型的运算