int类型的取值范围(为什么负数比正数表示的范围多一位)

int为4个字节:1字节=8位,所以int为32位在计算机中存储的二进制位数。

如果没有符号位的话: 就是32位:表示数的范围为2的32次方(可以举例数字就明白了).

最大的整数为:2的32次方-1。

就是这么大:

unsigned int 0~4294967295

如果有符号位的话,需要去除一个符号位,正数最大为:2的31次方-1 ,负数最小为:-2的31次方


至于为什么是-2的31次方,是因为负数计算的补吗问题:

这是由二进制补码的性质决定的。

一个二进制有符号数的补码,所能存储的数的范围是有负号的一半,无负号的一半,由于0占了一位,所以正数比负数少一个。

+0:0000 0000 | 0000 0000 | 0000 0000 | 0000 0000

-0: 1000 0000 | 0000 0000 | 0000 0000 | 0000 0000

+0和-0,都是表示0,那么我们就没有必要用两个数共同来表示0,我们用+0表示0,用-0取表示其他的数,上面我们也发现,-0其实表示的是-2³¹,所以这也是一种规定,可以让我们对资源有一个更充分的利用。


所以就是这么大:

int -2147483648~2147483647


参考文章:
int类型的数值表示数的范围
int类型为什么负数比正数表示的范围多一位

相关推荐
小小龙学IT1 小时前
Boost.Interprocess 开源 C++ 进程间通信库深度解析
c++·开源
晓蛋5 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
weilx12345 天前
C++笔记-文件IO-<fcntl.h>
c++
傲世仙尊5 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿5 天前
重载、重写(覆盖)、重定义区别
c语言
phltxy5 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
Smileyqp沛沛5 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++
phltxy6 天前
C 语言中的数据存储:从类型到二进制位
c语言