int的取值范围

2023-05-16

引言

在学C++或者Java的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围,溢出之后会怎么样等问题。

正文

基本数据类型

  • c++中的三类基本数据类型
    在这里插入图片描述

  • java中的四类基本数据类型
    在这里插入图片描述

上图可以看到c++和java之间的基本数据类型的区别,java多了一类布尔类型的数据。本文主要介绍int的取值范围,int数据类型在c++和java中都存在,是一种比较常用的数据类型。
int的取值范围为:-2^31 ---- 2^31-1 ,即:-2147483648 - 2147483647
那么为什么会这样取值呢?
在计算机当中数据都是以01二进制形式存储的,而整型变量int占的是4个字节,一个字节8位,也就是32位,所以一个整型变量在计算机当中其实可以用32位的二进制来表示。

正整数

比如1这个整型变量,用二进制可以表示为(int是带符号的整型变量):
0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 (第一位为符号位)
以上为正数1的原码(每8位为一个字节所以正好占4个字节) 。注:正整数用原码表示,负整数用补码表示,正整数的原码和补码相同。
所以用32位二进制数可表示的最大正整数为:
0111 1111 | 1111 1111 | 1111 1111 | 1111 1111 即:2^31-1=2147483647 因为是正整数,所以第一位符号位是0;全0的情况最后讨论。

负整数

同理-1这个负的整型变量在内存中用二进制可以表示为
1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 (负数-1的原码),但是负整数在计算机中是用补码表示的,所以要把这个原码转化成补码,补码就是原码除符号位之外取反后加1。
1111 1111 | 1111 1111 | 1111 1111 | 1111 1110 (-1反码),再对反码加1
1111 1111 | 1111 1111 | 1111 1111 | 1111 1111 (-1补码)

同理计算机中用32位二进制数可表示的最小负整数为:
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 (-2147483647补码)

由于计算机中是用补码进行计算的,所以-2147483648补码可以表示为
1000 0000 | 0000 0000 | 0000 0000| 0000 0000
那么其原码和反码理论上是存在的,加上第一位符号位,32位是无法存储的,但计算机中由于直接用补码进行计算,所以可以存储其补码

此外还有两种情况没有包含进去:
+0
0000 0000 | 0000 0000 | 0000 0000| 0000 0000 (原码、反码和补码匀为同一个)
即整数为0这种情况,在二进制中0的反码可以表示为-0和+0这两种情况
-0
1000 0000 | 0000 0000 | 0000 0000| 0000 0000 (原码)
即-0,反码表示为:
1111 1111 | 1111 1111 | 1111 1111 | 1111 1111
-0补码为反码加1,则补码为:
1 0000 0000 | 0000 0000 | 0000 0000| 0000 0000 第一位1舍去即:
0000 0000 | 0000 0000 | 0000 0000| 0000 0000,所以+0和-0的原码是一样的,由此可见计算机为什么会使用原码进行计算。
另外大部分计算机中运算都是通过加法器实现的,所以两个正数做减法运算会表示为一个正数加上另外一个取反的正数(负数)得到,那么这时候第一位符号位就起了很大作用,这种带符号的计算方法就简化了计算机的运算。
最后为什么要用原码进行计算,而不用反码或者原码?0就是最好的例子。

程序验证

最后来考虑如果取int的值超过这个范围的情况,以下为程序来验证:

#include<iostream> 
using namespace std;
int main()
{
	int i=2147483647;
	int j=2147483648;
	int k=2147483649;
	cout<<i<<endl;
	cout<<j<<endl;
	cout<<k<<endl;
	return 0;
}

输出结果

int result
从上图输出结果来看,可以看到一个很有趣的结果,当正整数超出2147483647范围后出现了循环取值的现象,即2147483648溢出后回到了最小负整数-2147483648,2147483649溢出后变成了-2147483648+1=-2147483647,依次类推。
所以2147483649可以表示为-2147483648+1,1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 + 0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 = 1000 0000 | 0000 0000 | 0000 0000 | 0000 0001
所以int整型溢出后可以用这样的方式类推。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

int的取值范围 的相关文章

  • java日志之log4j、log4j2、slf4j

    本文从整体视角分析 xff0c 重在帮助初学者了解log4j log4j2之间的关系 以及与slf4j整合时使用的中间jar包 xff1a slf4j log4j12 log4j slf4j impl 1 Log4j log4j核心包只有一
  • Spring框架中的IOC容器及bean管理

    这篇文章讲述的是Spring框架中的IOC容器及bean管理 xff0c 如有错误或者不当之处 xff0c 还望各位大神批评指正 什么是IOC容器 xff1f IOC即反转控制 xff0c 创建对象的权利交给容器来完成 xff0c 而程序要
  • 磁力机航向角计算与补偿

    地理坐标系下该点的磁场强度为 xff08 M 0 xff0c D xff09 xff0c 磁力计测得的三轴磁场强度为 xff08 mx my mz xff09 当我们认为飞机是完全水平放在地上的时候 xff0c 即Z轴和Zb轴是平行的时候
  • Decorators 装饰器

    预备知识 xff1a args的使用方法 xff0c args 用来将参数打包成tuple给函数体调用 例子一 xff1a span class token operator gt gt span span class token oper
  • 一个JAVA程序员成长之路分享

    我搞JAVA也有些日子了 因为我比较贪玩 上进心不那么强 总是逼不得已为了高薪跳槽才去学习 所以也没混成什么大牛 但好在现在也已经成家立业 小日子过的还算滋润 起码顶得住一月近万元的吃喝拉撒玩各种贷款信用卡 不为金钱过于发愁了 我特别感谢当
  • 「Jenkins Pipeline」- 执行 Shell 命令 @20210203

    问题描述 Jenkins Pipeline xff0c 更像 胶水 xff0c 将很多脚本与工具粘合在一起 xff0c 实现自动化任务 xff0c 而它本身并没有提供特定功能 执行 Shell 命令或者脚本是个非常常见的任务 该笔记将记录在
  • 「snap」- ERR - Waiting for automatic snapd restart @20210208

    问题描述 使用 snap 安装 chromium 浏览器时出现如下错误 xff0c 并一直卡住 xff1a 2020 08 21T16 56 10Z INFO Waiting for automatic snapd restart 问题原因
  • 锁屏时间格式不随多用户的时间格式变化而变化?

    背景 xff1a 时间格式有12 24小时制 xff0c 系统设置时间格式之后 xff0c 状态栏和锁屏的时间显示也会相应的发生变化 xff0c 但是现在发现一个问题 xff1a 当我切换到多用户设置时间格式的时候发现 xff0c 状态栏的
  • R语言利用igraph和networkD3包快速入门做出炫酷的社交网络图等几类图。

    原来CDSN编辑器老出问题 xff0c 图片各种显示不好 xff08 老文章依然是原来编辑器 xff09 xff0c 又将本文整理了一遍地址 1 igraph包绘制社交关系图 xff08 也有叫知识图谱的 xff09 绘图的快速入门技巧是三
  • 「Shell」- 判断字符串结尾 @20210209

    下面围绕 判断字符串是否以 txt结尾 展开 转变一下也同样适用于 判断字符串是否以 txt开头 通用的方法 方法一 使用grep命令 bin sh str 61 34 path to foo txt 34 使用if语句 if echo 3
  • 「Firefox」- 在地址栏中,显示二维码 @20210211

    问题描述 在以前某些版本的 Firefox 中 xff0c 地址栏会显示当前地址的二维码 xff0c 再后便消失 xff08 可能功能被取消 xff09 现在 xff08 02 10 2021 xff09 xff0c 我们需要在地址栏中显示
  • 「GNOME 3」- 修改 Topbar 字体(顶部栏字体)、调整默认主题 @20210211

    问题描述 在 GNOME 3 中 xff0c 在进行字体设置时 xff0c 我们发现 Topbar 的字体没有修改 xff0c 因此窗口字体与 Topbar 字体不同 经过搜索 xff0c 我们知道 xff0c Topbar 的字体是主题负
  • 「KVM」- 常见错误及注意事项 @20210223

    启动错误 1 vmport is not available with this QEMU binary 问题描述 xff1a 启动Guest时产生如下错误 xff1a error unsupported configuration vmp
  • 「Jumpserver」- 通过 SSH 连接 Jumpserver 资产 @20210302

    问题描述 在通常情况下 xff0c 我们会通过 Web 界面访问资产 执行命令 xff0c 以进行服务器管理 但是 xff0c 有时候我们也需要通过 SSH 客户端连接服务器 Jumpserver 提供对此的支持 该笔记将记录 xff1a
  • 「Selenium」- 在页面中,点击按钮(或元素) @20210311

    问题描述 该笔记将记录 xff1a 在 Selenium 中 xff0c 如何使用代码点击按钮 xff0c 以及常见问题处理 解决方案 使用 click 点击 通常点击元素使用 click 方法即可 xff1a 选择元素并进行点击 webD
  • 「Linux」- 安装网易云音乐(Neteast Cloud Music) @20210330

    问题描述 我们想在 Ubuntu 20 04 LTS 中安装网易云音乐 xff08 Neteast Cloud Music xff09 xff0c 自然是用来播放音乐 该笔记将记录 xff1a 在 Debian 及衍生版 xff08 比如
  • LaTex | 导出 PNG 图片

    问题描述 我们需要将 LaTeX 文档转换为 PNG 图片 xff08 我们需要使用 LaTeX 的 bytefield 包绘制 字节序列图 xff0c 以在 Zim 中显示 xff09 该笔记将记录 xff1a 如何使用 tex 文件 x
  • Linux:邮箱客户端

    原文地址 xff1a Linux xff1a 邮箱客户端 xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 问题描述 我们最开始使用 Thunderbird 邮件客户端 xff0c 但是在 GNOME 3 中当收到
  • Synergy : 多电脑共享鼠标和键盘

    原文地址 xff1a Synergy 多电脑共享鼠标和键盘 xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 注意事项 目前 xff08 09 28 2020 xff09 xff0c 建议使用 Barrier xf
  • eslint常用

    0 xff0c 1 xff0c 2分别表示off warning error三个错误级别

随机推荐

  • Kubernetes Objects│Service

    原文地址 xff1a Kubernetes Objects Service xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 Service xff0c 服务 xff0c 用于暴露 Pod 以供访问 官方文档及手册
  • draw.io - 安装

    原文地址 xff1a draw io 安装 xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 问题描述 我们没有采用自建 draw io 服务 xff0c 而是使用它的客户端 jgraph drawio deskt
  • Android网络优先级及更改

    Android版本 xff1a Android 4 4 4 涉及内容 xff1a 1 xff0c 网络优先级 xff1b 2 xff0c 网络切换 xff1b 3 xff0c 界面显示 解决问题 xff1a 1 xff0c 更改网络优先级
  • Java生产者、消费者模式的几种实现方式

    文章目录 方式一 xff1a BlockingQueue方式 最优方式 方式二 xff1a Synchronized 43 wait notifyAll方式方式三 xff1a ReentrantLock 43 Condition方式几种方式
  • 常识 让世界充满AI

    5 https sci hub cc 下载论文 4 问题 等于 机遇 问题抽象为可以解决执行的问题 xff0c 例如 xff1a 自动驾驶 xff0c 细化为特定场景下的自驾车 xff0c 如观光车 xff0c 公交车等 公司的核心是数据
  • iOS-NSLineBreakMode-lineBreakMode属性详解(UILabel省略号位置)

    apple文档 64 property nonatomic NSLineBreakMode lineBreakMode default is NSLineBreakByTruncatingTail used for single and m
  • spark机器学习笔记:(一)Spark Python初探

    声明 xff1a 版权所有 xff0c 转载请联系作者并注明出处 http blog csdn net u013719780 viewmode 61 contents 博主简介 xff1a 风雪夜归子 xff08 英文名 xff1a All
  • Jackson 解析 JSON 详细教程

    点赞再看 xff0c 动力无限 微信搜 程序猿阿朗 本文 Github com niumoo JavaNotes 和 未读代码博客 已经收录 xff0c 有很多知识点和系列文章 JSON 对于开发者并不陌生 xff0c 如今的 WEB 服务
  • 百度百科全站爬取教程

    百度百科全站 目前有16 330 473个词条 这里介绍一个基于scrapy的分布式百度百科爬虫 xff0c 能够全量爬取百度百科的词条 github地址 特性 百科类网站全站词条抓取 xff0c 包括百度百科 互动百科 wiki中英文站点
  • 贪心法

    贪心法 lt gt 贪心算法并不是从整体最优上加以考虑 xff0c 而是从局部最优考虑 xff0c 每次总是做出当前看起来最好的选择 xff0c 在某种意义上的局部最优选择 xff1b lt gt 最优子结构性质 xff1a lt gt 贪
  • shasum: command not found

    yum install perl Digest SHA
  • 记一次http请求报400问题

    引言 由于之前代码比较老 xff0c 都是采用http1 0方式请求 xff0c 于是采用了之前的代码进行实现 xff0c 结果之前测试没有问题 xff0c 后面投产了就报400错误了 xff0c 重新测试还是没有问题 最后通过接收方日志排
  • 数组下标排序

    前言 平时大家大多都是对数组进行各种方式的排序 xff0c 很少对数组的下标进行排序 xff0c 什么是对数组的下标进行排序 xff1f 即按数组值的大小对相应的数组下标进行排序 具体方法见以下正文 正文 解题的重点是如何保存值和下标的对应
  • SpringBoot项目无法接收到数据(Whitelabel Error Page)

    前言 在一次SpringBoot项目模块迁移的过程中 xff0c 新建的模块无法接收到前端的数据 xff0c 在地址栏输入对应的url后显示Whitelabel Error Page 正文 核对了url以及启动类上注解 64 SpringB
  • 解决android7.1系统出现的Consumer closed input channel or an error occurred. events=0x9错误

    自己实现的一个Socket聊天app xff0c 这个app是在17年的时候写的 xff08 当时也是随便写的 xff0c 没注意太多细节 xff09 xff0c 那个时候还是android4 4系统的手机 xff0c 然后写完在真机上调试
  • Java实现多线程轮流打印1-100的数字

    正文 首先打印1 100数字如果用一个单线程实现那么只要一个for循环即可 xff0c 那么如果要用两个线程打印出来呢 xff1f xff08 一个线程打印奇数 xff0c 一个线程打印偶数 xff09 于是大家会想到可以通过加锁实现 xf
  • 安卓手机利用DroidCam当电脑摄像头使用方法

    笔记本电脑有点老了 xff0c 摄像头好像坏了 xff0c 重装了一下午驱动都没弄好 xff0c 换了ubuntu系统也打不开摄像头 xff0c 然后就放弃了 xff0c 于是想到了能不能用android手机当笔记本电脑的摄像头 xff1f
  • Dell安装驱动程序出现的错误(DupAPI::Execute): *** Shell Execute Error. System error text

    在官网下的驱动却怎么也安装不上 xff0c 一直提示 The update installer operation is unsuccessful 然后打开日志文件查看 xfeff 04 10 19 10 12 11 Update Pack
  • 浮点数大小比较

    引言 在一次某公司的笔试题中出现了一题在一个无序的浮点数数组中找出相同的数 xff0c 那么在计算机中一般的整型的十进制数一般都是直接通过 61 61 来判断两个数是否相等的 xff0c 但是如果是浮点数还可以用这样的方式进行判断吗 xff
  • int的取值范围

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