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类型为什么负数比正数表示的范围多一位

相关推荐
Code_Solitude11 小时前
c语言:指针(3)+冒泡排序
java·c语言·算法
巴巴媛66612 小时前
【Debug1】程序死机,while(1)循环,怎么办?
c语言·笔记·stm32·嵌入式硬件·bug
TDTC_XQ12 小时前
模板类的写法
linux·c++
Lxx_Zw12 小时前
PID 用顺了,然后呢:增强手术与前馈
c语言·stm32·单片机·嵌入式硬件
BeiGuTing_code12 小时前
C链表基础(二)有视频模拟!!!
c语言·链表·音视频
CCCCCCCCharlie12 小时前
深入解析I/O底层:文件描述符与缓冲区真相
linux·开发语言·c++·算法
自信1504130575912 小时前
重生之从0开始学习c++之string(下)
c++·学习·stl
学逆向的13 小时前
C 选择结构的执行效率分析
c语言·开发语言·算法·网络安全
wuminyu13 小时前
Continuation::freeze与thaw的x86_64汇编Stack Chunk拆解源码分析
java·linux·c语言·汇编·jvm·c++
kunicoding14 小时前
C++ 策略模式实战:写一个可以“一键换输出“的日志系统
开发语言·c++·策略模式