首页 > 技术文章 > 编码 | 数学运算需要注意数据类型转换

CristL 2020-10-19 15:48 原文

在数学运算过程中,常遇到大数据运算后得到的结果数据类型和默认的数据类型不一致,所以会出现异常报错的问题;

常见的使用宏定义表示数据运算,例如:

#define DEBUG_DISK_SIZE  (4096*1024*1024)

unsigned long long int size = DEBUG_DISK_SIZE;

编译的过程中会提示:warning: integer overflow in expression [-Woverflow]

这个主要原因是 4096、1024 均为整形,然后相乘后得到的结果默认也为整形,但是相乘后的结果已经大于整形所能表示的最大值,所以就提示异常了

【解决方法】

在运算过程中,将相乘的成员变量强制转换为更大数据类型,相乘运算后得到的结果数据类型默认也就变大了,如:

#define DEBUG_DISK_SIZE  (4096LL*1024*1024)

unsigned long long int size = DEBUG_DISK_SIZE;

问题解决。

推荐阅读