C,关于uint64_t在赋值时遇到的数值溢出问题

这里uint64_t就是unsigned long long int;可赋值的时候为什么用相乘的会出现数值溢出的问题?是哪个小细节我在学习的时候没有注意到吗,望点播一下。

img

img

因为相乘的两个是整形常量,整形常量默认是int类型,那两个整数相乘已经超过了int类型的范围

100 * 89999999这里计算的时候,100和89999999都是按照int类型计算的,需要加类型转换
uint64_t odemeter = (uint64_t)100 * 89999999

我觉得集成开发环境识别错了,看你的提示:它是提示int溢出了,没有识别出是unsigned long long

不是uint64_t溢出,是int溢出,你的乘法2个乘数都是int型,结果也默认是int型,还没赋值之前就已经溢出了
你需要使用类似(long)100*89999999这种,先将一个乘数转换成long型,然后按照2个long型进行乘法运算,得到的结果也是long型

uint64_t odemeter=((uint64_t)100) * ((uint64_t)89999999); 

如果想不溢出,你需要把整形常量强制为int64类型