【int的取值范围以及溢出问题】


一、int 的取值范围及溢出原因

1 1 1字节 B y t e Byte Byte) = 8 8 8比特位 b i t bit bit
i n t int int 型在 32 32 32位和 64 64 64位操作系统中取值范围一样,( l o n g long long i n t int int 型有不同)
都为 【 − 2147483648 , 2147483647 】 【-2147483648,2147483647】 21474836482147483647 【 − 2 31 , 2 31 − 1 】 【-2^{31},2^{31}-1】 2312311
二进制形式为:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx x为 0 0 0 1 1 1
而超出这个范围就会溢出;
如下代码:

#include <iostream>

int main()
{
	int a = 2147483647;
	std::cout << "a为int型变量" << '\n'; 
	std::cout << "a的最大值为:" << a << '\n';
	std::cout << "a的最大值再加1的值为:" << a + 1 << std::endl;
	return 0; 
}

运行结果为:

a为int型变量
a的最大值为:2147483647
a的最大值再加1的值为:-2147483648

即发生溢出;


二、溢出问题的解决

对所用数据以及代码执行过程中所出现的数学进行大致判断,看是否会超过 i n t int int型的范围,如下:

#include <iostream>
#include <algorithm> 
#include <cmath>

int main()
{
	printf("2^31 - 1的值为%12.2f\n", pow(2, 31) - 1);
	printf("10^9的值为%12.2f\n", pow(10, 9));
	printf("10^10的值为%12.2f\n", pow(10, 10));
	std::cout << '\n';
	std::cout << "2^31 - 1的值为" << pow(2, 31) - 1 << '\n';
	std::cout << "10^9的值为" << pow(10, 9) << '\n'; 
	std::cout << "10^10的值为" << pow(10, 10); 
	return 0; 
}

运行结果

2^31 - 1的值为2147483647.00
10^9的值为1000000000.00
10^10的值为10000000000.00

2^31 - 1的值为2.14748e+009
10^9的值为1e+009
10^10的值为1e+010

可见,当数据在 2 31 2^{31} 231 1 0 9 10^{9} 109范围附近时,就可能会发生溢出现象;
对所用数据以及代码执行过程中所出现的数据进行大致判断,如果有超出范围的可能性,则选择用 l o n g long long i n t int int 型或者 l o n g long long l o n g long long 型;


E v e A h A c d w 18 EveAhAcdw18 EveAhAcdw18


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值