C++ INT_MIN和INT_MAX
在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。该表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。
C中int类型是32位的,范围是-2147483648到2147483647 。
(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN;
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2;
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX;
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。
INT_MIN与INT_MAX
在标准头文件limits.h中定义
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)//这里没有简单地将INT_MIN赋值成-2147483647,是因为-2147483648对于编译器而言是个表达式,而2147483648对于32-bit整数是无法表示的,所以经过这个表达式的结果是未定义的。在GCC上直接写-2147483648后,编译器给出了警告,说结果是unsigned。
#include <iostream>
using namespace std;
int main() {
// int -2147483648~2147483647 2^32
cout << INT_MIN << endl;//-2147483648
cout << INT_MAX << endl;//2147483647
// unsigned int 4294967295 2^32
cout << UINT32_MAX << endl;//4294967295
// long long 9223372036854775807 2^64
cout << LONG_LONG_MAX << endl;//9223372036854775807
cout << LONG_LONG_MIN << endl;//-9223372036854775808
// unsigned long long 18446744073709551615 2^64
cout << UINT64_MAX << endl;//18446744073709551615
return 0;
}

本文详细解释了C/C++中INT_MIN与INT_MAX的定义及其在不同情况下的运算结果,包括上溢和下溢的情况。同时介绍了如何通过标准头文件limits.h来获取这些值。
6818

被折叠的 条评论
为什么被折叠?



