C++中定义long long 类型变量该注意的问题

//首先先知道 int 和 long long 最大值各为多少
printf("%d\n", INT_MAX);  //输出2147483647
printf("%lld\n", INT64_MAX);//输出9223372036854775807
//开始定义
long long x = 2468 * 100000000; //原以为 = 246800000000 < long long最大值
printf("%lld\n", x); 	结果输出-1894967296 明显溢出

问题出在哪里??

//打印 X 的内存空间
printf("%d\n", sizeof(x));  //输出 8 也没错

问题在于:

printf("%d\n", sizeof(2468));   //输出 4  int类型
printf("%d\n", sizeof(100000000));	//输出4	int类型2468 * 100000000 也保存在 int中 导致溢出 溢出的结果赋值给x 也溢出

解决

long long a = 2468, b = 100000000;
long long x = a * b;
printf("%lld\n", x);	正常输出

总结

小于INT最大值的常数,自动保存为INT类型

INT * INT 得到的结果也是INT,即使赋值给 long long 也有溢出的情况发生

如果数据太大 建议用 long long = long long * long long 保证不溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值