怎样正确对 Keil长整数(long)赋值~~~
关于如何对 Keil长整数(long)正确赋值,这个问题别说新鸟,有些老司机也会犯错!
这里再次强调,Keil长整数(long)赋值 结尾 必须加 L
否则 Keil 内部作整数(int)处理
经典实例,见以下的 STC 主时钟定义
#define MAIN_Fosc 22118400L //定义主时钟
//#define MAIN_Fosc 12000000L //定义主时钟
//#define MAIN_Fosc 11059200L //定义主时钟
//#define MAIN_Fosc 5529600L //定义主时钟
//#define MAIN_Fosc 24000000L //定义主时钟
是的,还有预处理有计算时也一样,计算有超过2字节的也要做处理。写了个320*240/1000。结果算不对。要改320L*240L/1000 加不加无所谓, KEIL的常数默认是16位的,不指定,则超过16位的就会截断成16位的。
给32位变量给立即数,超过65535的,一定要加L或UL。可以参考STC的例子,十几年前的例子都是是这样处理的了,最经典的是定义主频。 梁工 发表于 2023-1-14 13:38
KEIL的常数默认是16位的,不指定,则超过16位的就会截断成16位的。
给32位变量给立即数,超过65535的,一定 ...
梁工,问一下 如果是
long a,a1,a2;
a = adc(2);//读取ADC
a1 = a *567; //a1 肯定是大于65535的数
a2 = a1 *789;//这个a1应该如何处理 琪琪鸭 发表于 2023-7-29 21:11
梁工,问一下 如果是
long a,a1,a2;
a = adc(2);//读取ADC
还没有溢出,不需要做什么处理。 梁工 发表于 2023-7-29 23:12
还没有溢出,不需要做什么处理。
找到问题了
unsigned int a,a1;
unsigned long a2;
a2 = a * a1;
其实这是我想问的 上面的这个算法绝对的完犊子。。 琪琪鸭 发表于 2023-7-31 21:17
找到问题了
unsigned int a,a1;
unsigned long a2;
a * a1溢出了。应该写成:
a2 = (unsigned long)a * a1;
梁工 发表于 2023-7-31 23:51
a * a1溢出了。应该写成:
a2 = (unsigned long)a * a1;
好的梁工谢谢解答
页:
[1]