51单片机 /、* 运算问题

上图看代码

图片发自App

图片发自App

通过串口输出可得,adc_value=1023,用计算器可算得(1023*4930)/1023=4930,但是在串口得到的却是0.061,很显然值是错的,我们把代码放到Visual Studio中编译来运行

图片发自App

结果为4930,值是正常的

原因总结: 在C语言中四则运算默认使用int型变量存储其运算结果,51位单片机是8位的MCU,int型变量只占2字节,则int取值范围为2^8 + 2^8 =65536,而1023*4930已经大于这个值,所以是无法运算的,而在Visual Studio中运行正常,是因为电脑CPU是64位的,int占4字节。更改代码:

图片发自App

将结果转换取值范围更大的long类型,结果正常。

图片发自App
8/16位系统中变量取值范围
char                      1字节    -128~+127
int                          2字节      -32768~+32767
unsigned int        2字节    0~65535
long int                  4字节 -2147483648~+2147483647


32/64位操作系统中取值范围:
int        -2147483648~2147483647(-2^32~2^32-1   
4个字节

你可能感兴趣的:(51单片机 /、* 运算问题)