- 一、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;
而超出这个范围就会溢出;
如下代码:
#includeint 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



