int型的取值范围是?

为什么 int 型数据类型的取值范围不对称呢?

为什么最大值是 2^31 - 1呢?

为什么最小值是 -231,而不是-231 + 1呢?

我们知道,计算机能够认识的只有二进制(也就是 0 和 1),而我们所认识的字符和数字都要转换成二进制才能让计算机识别并执行。

这里以java的int型为例说明,

我们首先要明白的是,

java的 int 型是32位的,

因为一个 int 值占 4 个字节 byte ,一个字节是 8 位 bit(即8个二进制位),所以 int型 占 32 位,

其中第32位,也就是最高位是符号位,正数为 0,负数为 1,

剩下的31位是用来表示数字部分。

正数在计算机中表示为 原码,

比如:

1 的原码是 :0000 0000 0000 0000 0000 0000 0000 0001

1 的补码是:0000 0000 0000 0000 0000 0000 0000 0001

1 的反码是:0000 0000 0000 0000 0000 0000 0000 0001

没错,正数的 原码 、补码 、 反码 都相同,

那么最大是多少呢?

当然是除了符号位,其他位置上都为 1 的时候,

0111 1111 1111 1111 1111 1111 1111 1111

这个数就是 2147483647,它是 32 位中所能表示的最大正数。

负数在计算机中表示为 补码,

比如:

-1 的原码是:1000 0000 0000 0000 0000 0000 0000 0001

-1 的反码是:1111 1111 1111 1111 1111 1111 1111 1110

-1 的补码是:1111 1111 1111 1111 1111 1111 1111 1111

很明显,负数的 原码 、补码 、 反码 并不相同,而且,

负数的原码 是在 正数的原码 上 将符号位取反 取反,

负数的反码 是在 负数的原码 上 除符号位后 取反,

负数的补码 是在 负数的反码 上 加一。

负数的补码 也可以说是在 负数的原码 上 取反加一。

所以我们再来看看 -2147483647 的表示,

-2147483647 的原码是:1111 1111 1111 1111 1111 1111 1111 1111

-2147483647 的反码是:1000 0000 0000 0000 0000 0000 0000 0000

-2147483647 的补码是:1000 0000 0000 0000 0000 0000 0000 0001

那它是最小值吗?

不是,还有一个很奇怪的东西。

0 在计算机中的表示

在二进制中,0 有两种表示方法,

+0 的原码:0000 0000 0000 0000 0000 0000 0000 0000

-0 的原码:1000 0000 0000 0000 0000 0000 0000 0000

因为 0 只需要一个,所以就把 -0 当成了最小的数 -2147483648

可以这么理解,正因为 0 有两种表示方式,所以会多了一个负数出来,

-2147483648 的补码就是:1000 0000 0000 0000 0000 0000 0000 0000,它在 32位里面是没有原码的。

但需要注意的是,这个补码并不是真正的补码,

真正的补码应该是 1100 0000 0000 0000 0000 0000 0000 0000,但在 java 中溢出了,

所以,就是1000 0000 0000 0000 0000 0000 0000 0000

8位的范围则是[-128, 127]

我的学习论坛

HandsomeForum:用Java编写的学习论坛,打造我们自己的圈子!(http://huangjunjie.vip:66)
文章链接:http://huangjunjie.vip:66/blog/read/b9m2dt19s0zrru4zzn

int型的取值范围是?相关推荐

  1. 惭愧!直到今天才真正明白为什么int型的取值范围是-2^31~2^31-1

    个人博客:The Blog Of WaiterXiaoYY 欢迎来互相交流学习. 前言 虽然之前学过<计算机组成原理>,也理解了原码.补码.反码等东西,但终究还是理解不够深刻, 最近在做位 ...

  2. int类型变量的取值范围?

    int类型变量的取值范围? 前言 在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围,溢出之 ...

  3. int类型变量的取值范围

    int类型变量的取值范围? 前言 前言 在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围, ...

  4. 整型int数据的取值范围是怎么来的?

    引言 大家都知道占2个字节的int类型,取值范围是-128~127:那么这个-128究竟是怎么来的呢? 正文 以java语言中的byte类型为例,byte占用1个字节byte,共8个bit:也就是8个 ...

  5. int 类型的取值范围

    大伙都知道int类型的 取值范围是 -2147483648 到 2147483647         那为什么不是                              -2147483647 到 ...

  6. Int类型变量的取值范围为何是2的31次方?

    Int类型变量的取值范围解释 Int类型数据的取值范围为:-2147483648 ~2147483647,即 - 231 ~ 231 -1. 首先:在C++中一个Int类型变量占4个字节,即32位,而 ...

  7. C语言中短整型取值范围,以c语言中短整型(signed int)的取值范围为例说明各种数据类型取值范围的计算方式与原理...

    在开始我们的正文之前,你需要先了解一下原码.反码.补码这三个概念以及这三者之间的相互转换方式. 在有了一定的了解之后,我们开始我们的介绍.在本文中,我们以短整型为例,给大家介绍该类型的取值范围的计算方 ...

  8. float型y取值在1.0c语言表达式,2011年全国计算机二级C语言模拟试题及答案(14)...

    一.选择题(1-14每题1分,15-18每题1.5分,共20分)1.可选作用户标识符的一组标识符是() AvoidBc5_b8CForD3a Define_53-abDO WORDIFCaseint ...

  9. MySQL创建无符号整数(int)及取值范围

    文章目录 1. 取值范围介绍 2. 创建操作 2.1. 使用Navicat 2.2. 命令 1. 取值范围介绍 官方帮助:Integer Types (Exact Value) - INTEGER, ...

最新文章

  1. Xcode8 注释快捷键无效, 解决方案
  2. java模拟Digest.认证
  3. String和enum的互相转换
  4. SAP Commerce Cloud Spartacus UI 修改 primary color 的方法
  5. 2020项目商机_2020未来商机,一万元可以做什么项目
  6. 移植mysql到嵌入式ARM平台
  7. 前端学习(529):等分布局存在间距得实现得解决方案
  8. python未将对象引用设置到对象的实例_在Python中使用pingarapi。服务器引发Webfault:对象引用未设置为对象的实例...
  9. Linux—系统启动类故障之 GRUB引导故障
  10. 003-redis-命令-key操作,字符串操作
  11. linux+nginx+php+mysql安装及配置
  12. SQL那些事儿(九)--oracle数据库知识体系
  13. C/C++ 计算程序运行时间的代码
  14. 厦门大学计算机考研复试线2021,2021浙江大学、中科大、厦门大学考研复试分数线公布!...
  15. 记一次前端优化首屏加载
  16. 遍历vad二叉树来遍历进程里的模块
  17. 如何让你的Linux程序程序后台运行
  18. mtk使用android开关机动画,android MTK修改开关机动画
  19. windows服务部署
  20. 博弈游戏·Nim游戏·二

热门文章

  1. 计算机视觉入门(一)
  2. 【错误集】 MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors
  3. 将windows10操作系统硬盘格式化为FAT32
  4. 数值型数据的表示(3.0)
  5. 你好,你是谁,可不可以向我出示源代码让我确认身份
  6. 超好用的pdf编辑+pdf转word工具 – Adobe Acrobat Pro DC下载
  7. 02好好学习读书笔记-- 黄金思考圈
  8. 一回生,二回熟,三回巧
  9. 看了我的 mybatis-plus 用法,全公司同事开始悄悄模仿了。。
  10. Joint Discriminative and Generative Learning for Person Re-identification