编码 | 数学运算需要注意数据类型转换
在数学运算过程中,常遇到大数据运算后得到的结果数据类型和默认的数据类型不一致,所以会出现异常报错的问题;
常见的使用宏定义表示数据运算,例如:
#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;
问题解决。