C++中INT_MAX / INT_MIN

参考链接 https://www.cnblogs.com/yangxin6017/p/9500867.html
INT_MAX = 2^31 - 1 =2147483647,INT_MIN= - 2^31 = -2147483648
INT_MIN需定义成 -INT_MAX - 1, 因为-2147483648无法表示, 无法对2147483648取反

INT_MAX + 1 = INT_MIN
INT_MIN - 1 = INT_MAX
abs(INT_MIN) = 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和long

C++标准只规定了sizeof(int) <= sizeof(long),但是具体各占多少个字节没有规定,由操作系统和编译器自己决定。

32位Windows和Linux都采用ILP32模型,int和long一样都是32位的。
64位Windows采用P64模型, int和long都是32位的。
64位Linux采用LP64模型, int是32位的,但long是64位的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容