栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录
  • 一、int 的取值范围及溢出原因
  • 二、溢出问题的解决


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

1 1 1个字= 2 2 2个字节( 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】 【−2147483648,2147483647】即 【 − 2 31 , 2 31 − 1 】 【-2^{31},2^{31}-1】 【−231,231−1】
二进制形式为:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx x为 0 0 0或 1 1 1;
而超出这个范围就会溢出;
如下代码:

#include 

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 
#include  
#include 

int main()
{
	printf("2^31 - 1的值为%12.2fn", pow(2, 31) - 1);
	printf("10^9的值为%12.2fn", pow(10, 9));
	printf("10^10的值为%12.2fn", 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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号