32G8K64是否可以进行64位整型的运算
项目中遇到两个数相乘结果超过2的32次方,开始用的double变量计算,但计算出来的结果不对(不知道什么原因),
想请教下该单片机是否可以支持64位整型的运算。
和单片机无关,取决于编译器
看Keil的帮助文档
支持
用#pragma float64启用
目前最新版本的Keil软件
C251编译器:
支持32位整形,使用long关键字定义32位整形变量
支持单精度浮点,使用float关键字定义单精度浮点变量
支持双精度浮点,使用double关键字定义双精度浮点变量,必须使用“#pragma float64”开关打开双精度,
否则double也是定义的单精度变量
不支持64位整形
如下图:
C51编译器:
支持32位整形,使用long关键字定义32位整形变量
支持单精度浮点,使用float关键字定义单精度浮点变量,使用double也只能定义单精度浮点变量
不支持64位整形
不支持双精度浮点(C51编译器不支持float64开关)
对于大数计算,常见的有数据拼接法和字符串法
字符串法就是将大数作为一个字符串来进行存储,计算时通过模拟手工计算乘法来实现的
拼接法就是将大数切割分成多个可以计算的小数字,分别计算完成后,再统一进行拼接的算法
例如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]