int 为什么是2147483647_int范围为啥是-2147483648到2147483647

单位换算

1 Byte(B) = 8 bit

1 Kilo Byte(KB) = 1024B

1 Mega Byte(MB) = 1024 KB

1 Giga Byte (GB)= 1024 MB

1 Tera Byte(TB)= 1024 GB

1 Peta Byte(PB) = 1024 TB

从上可以了解计算机最小的存储单位是bit,即一位二进制数(0 或 1),8个二进制位为一个字节(B),这个字节也是最常用的单位,对应我们Java的:

最常用的int 需要4个字节,4个8位,也就是32位 ,即 00000000 00000000 00000000 00000000

我们来详细看下,每个位可以代表几个数字

1个位能表示多少东西: 只有2种情况(0,1),最小0 最大1,推导出 2的1次方 = 2

2个位能表示多少东西: 有4种情况(00,01,10,11),最小00 最大11,推导出 2的2次方 = 4

3个位能表示多少东西: 有8种情况(000,001,010,011,100,101,110,111),最小000 最大111,推导出 2的3次方 = 8

...

8个位能表示多少东西:最小:00000000 最大:11111111,用上面推导的算法2的8次方 = 256 这就是8位 也叫一个字节

关键点来了,一个字节的范围是多少?

a.如果没有正负之分,那可以表示 0~255 共256个数字,范围就是最小值是0,最大值是255(计算机有正负区分,所以这个值是错的)

b.如果有正负之分,那可以表示-128  ~  127 (规定)也是256个数,那为啥是这样,重点来了,仔细看:

计算机用最高位,1代表负数,0代表正数,以8位来表示就是 0xxxxxxxx 的第一个0代表正数, 1xxxxxxxx的第一个1代表负数 ,那么8位的第一个位(最高位)就不能算,也就是说只有7位, 即2^7=128 个数字,一共正负各128种状态,如果不采用特殊处理,这时候0占用2个编码(10000000和00000000),数据表示范围为-127到-0及+0到127,这样总体上一个字节只有255种状态,因为其中0具有正0和负0之分,这不符合数学意义也浪费一个编码(早期硬件很昂贵,一位或者一个编码的浪费都是不可饶恕的)。所以计算机规定,如果是正0,也就是说遇到00000000这个编码(正0)就算它为0,如果遇到10000000(负0)这个编码会特殊处理一下,用下面的算法处理

遇到10000000(负0)这个编码

先取反,得到值为:01111111

再加1,得到值为 :10000000

此时10000000的最高位还是1代表负数的定义,同时原先表示负0的编码被利用起来表示-128

现在能理解为啥一个字节(8位)的范围为-128  ~  127,即范围就是最小值是-128,最大值是127

接下来 继续:

9位 =  2^ 9=512

10位 = 2^ 10 =1024

..... 以此类推直到第32位,也就是int的存储(4个字节),我们知道int的取值范围是-2147483648 ~ 2147483647 ,那为啥是这个范围呢?结合上面8位的取值范围-128  ~  127的原理,可以推倒其32位范围的原理

首先公式还是一样,2^32 = 4294967296,总共32位可以代表有这么多个数字,因为知道了计算机是分正负数的,所以4294967296 / 2 = 2147483648 ,也就是说从 -2147483647 ~ -0 和 +0 ~ 2147483647 这么个范围了,但是上面说了-0是浪费的,因为计算机是以补码的形式来存储数字的,

不管-0 (对应的码是1000 0000 0000 0000),

还是+0(对应的码 0000 0000 0000 0000),

补码都是0000 0000 0000 0000,这就造成了没有任何一个数的补码后值是1000 0000 0000 0000,所以就可以把这个补码用来存储一个数(不能浪费资源),就规定用它来存储一个数-2147483648
————————————————
版权声明:本文为CSDN博主「weixin_39753747」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39753747/article/details/111718882

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 关闭端口_手把手教你在Linux中快速检测端口的 3 个小技巧

一个执着于技术的公众号前言 无论是要解决网络连接问题还是配置防火墙,第一件事是要检查系统实际打开了哪些端口。本文介绍了几种快速查找 Linux 系统上哪些端口向外部开放的方法。什么是开放端口 监听端口是应用程序监听的网络端口。你要得到的监听端口名单通常可以…

2021-01-12

系统设计-设计思路 定义结构体来保存通讯录中联系人的各项信息 使用主菜单实现对通讯录主要功能的管理,不同功能对应着不同的编号 使用结构体数据来存储多个联系人 采用文件来保存联系人的数据,提高操作效率 系统的数据输入包括输入功能编号以及联系…

2020-11-20

ln -s /bis_data/mysql/tmp/mysql.sock /tmp/ find / -name mysql.sock 2>/dev/null

未能找到程序集“platform.winmd_应用程序崩溃后 微软错误报告工具到底是如何联机检查解决方案的?...

在 Windows 应用意外崩溃后,系统似乎会努力地寻找解决方案。但是在绝大多数情况下,这一切都是徒劳的,并不会向用户给出任何结果。即便如此,很多人还是想要知道这个无效的过程期间到底都发生了什么。好消息是,近日微软 …

python升级到最新版本windows64位安装哪个包_手把手windows64位配置安装python2.7

这几天公司要用到python的一些算法,让我调研一番,之前对Python一次没接触的我在安装配置环境的时候由于版本的问题,折腾了好久,这里简单介绍一下我的安装方法,需要安装pyhton的朋友可以不再向我一样安装的那么纠结。。…

python连接服务器sql server_python – 无法通过pymssql连接到SQL Server

我试图通过pymssql从本地服务器上的* nix系统连接到运行在Windows XP系统上的SQL Server.但是,连接失败,如下所示db pymssql.connect(host192.168.1.102,userwww,passwordtest,databaseTestDB)Traceback (most recent call last):File "", line 1, in File "py…

pycharm 配置qt

在cmd中 pip install pyqt5-tools

python 网络编程 异步io_异步IO实现 小例(程序+驱动程序)

结合阻塞与非阻塞访问、poll 函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断…

mysql索引创建和使用注意事项

总结: 1、在使用索引时,一般情况下不建议使用like操作。如果使用,则%放在后面。否则不会使用索引。like ‘%abd%’不会使用索引,而like ‘aaa%’可以使用索引.(最左缀原则) 2、单列索引的使用: 《1》 只…

不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎

第1章 MySQL体系结构和存储引擎1.1数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合。实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行 的后台线程所共享。数据库实例才是真正用于操作数据库文件的。启动MySQL数据库…

我的模型--

from skimage import io, transform # skimage模块下的io transform(图像的形变与缩放)模块 import glob # glob 文件通配符模块 import os # os 处理文件和目录的模块 import tensorflow as tf import numpy as np # 多维数据处理模块 import time import matplotlib.pypl…

python蚁群算法 路径规划_蚁群算法(1) - Python实现

1 importnumpy as np2 importmatplotlib.pyplot as plt345 #建立“蚂蚁”类6 classAnt(object):7 def __init__(self, path):8 self.path path #蚂蚁当前迭代整体路径9 self.length self.calc_length(path) #蚂蚁当前迭代整体路径长度1011 def calc_length(self, path_): #pa…

win10-PC端无法输入中文

试过 任务管理器中,的 MscCtfMonitor任务,先选择结束,然后再选择运行。关闭后输入法就可重新使用了---不行 当出现Win10无法输入中文汉字时,首先我们需要重启一下“输入法”程序: 右击桌面“Windows”图标&#xff0c…

python变量和数据类型_python的变量和数据类型

1.Python的变量不用定义类型,每个语句后面也不用使用分号结束语句(不像java,C,C#要在变量声明后加上分号)如:message"hello python world"print(message)-----------------------------------age19print(age)2.字符串(1).在Python中用引号括起来的都是字符串, 其中的…

函数声明是形参类型省略

如果参数类型省略&#xff0c;默认为int类型。&#xff08;此为古老写法&#xff09; #include<stdio.h>float average(a,n) int a[]; {int j;float s0;float aver;for(j0;j<0;j){sa[j];}avers/n;return aver; }main() {int a[12]{10,4,2,7,3,12,5,34,5,9,6,8};print…

因果图中的约束关系

E:互斥&#xff0c;exclude&#xff0c;表示abc最多只能有一个1&#xff0c;即abc000&#xff0c;100&#xff0c;010&#xff0c;001&#xff0c;只能有1个1或者全0&#xff08;可不选&#xff0c;要选最多选一个&#xff09;。I:包含&#xff0c;include&#xff0c;表示abc不…

如何销毁一个实例化对象_JAVA中如何创建和销毁对象

第1条 考虑用静态方法代替构造器类可以通过静态工厂方法来提供它的客户端&#xff0c;而不是通过构造器。提供静态工厂方法而不是公有构造器&#xff0c;这样做具有几大优势。1.静态工厂方法与构造器不同的第一大优势在于&#xff0c;它们有名称。例如&#xff0c;构造器BigInt…

因果图-交通一卡通自动充值软件系统-实例分析

因果图法测试用例的设计步骤 &#xff08;1&#xff09;确定软件规格(需求)中的原因和结果 &#xff08;2&#xff09;确定原因和结果之间的逻辑关系 &#xff08;3&#xff09;确定因果图中的各个约束(constraints) &#xff08;4&#xff09;画出因果图并转换为决策表 &…

如何区分电梯卡为id卡ic卡_电梯刷卡系统基本属性

电梯刷卡控制系统的发展是十分迅速的&#xff0c;在这点上相信大家都有所体会。但是为了节约成本费用&#xff0c;很多地产商都是安装的基本常见的电梯刷卡控制系统&#xff0c;这种常见的电梯&#xff0c;能够满足基本上的用户需求&#xff0c;在零件上面也是能够与大多数的零…

python应用体系_python-大型django应用程序体系结构

如何适当地构建一个较大的Django网站,以保持可测试性和可维护性&#xff1f;本着最好的django精神(我希望),我们开始时不太关心网站不同部分之间的去耦.我们确实将其分为不同的应用程序,但是通过共同使用模型类和直接方法调用,它们直接相互依赖.这变得越来越纠结.例如,我们的一…