为什么int类型(16位)的下溢下限为-32768而上溢上限却是32767
原文地址:https://blog.csdn.net/m0_37402140/article/details/78079306
首先说吧,32767很容易理解,32767=2^15-1 (因为要有一个符号位),但为什么下溢的时候分明是15位来表示的数会出现32768呢??
首先从原码讲起,原码即为计算机中对数值的二进制表示,如 5用二进制表示为0000 0101 ;
其次就是反码,反码,顾名思义取反,对于正数来说,反码与原码相同;对于负数来说,反码为原码的各位取反(符号位除外),如(0011 0111)反= 0011 0111 (1101 0010)反= 1010 1101 ;
再次就是补码,计算机中,数值疑虑用补码表示和存储的,正数的补码与原码相同,负数的补码为其反码+1,如(0101 1101)补=0101 1101 (1101 0010)补=1010 1110
由于计算中的CPU只有加法器,没有减法器,所以在计算机采用原码做减法是会存在这样的问题:对于1-1=0
看做1+(-1)=0 二进制表示 0001+1001=1001 变成了十进制的负1而不是0。补码的出现很好的解决了这个问题,由于采用补码运算,则补码加法成为:[X+Y]补 = [X]补 + [Y]补同时,补码的减法变为:[X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补 补码的乘法变为:【X*Y】补=【X】补×【Y】补;在此我们以减法为例说明补码的优势,还以上述为题为例:(0001)补+(1001)补 = 0001 + 1111 = 0000 (最高位的进位省略),这样就顺利得到了0
另外,补码还解决了原码中存在两个0 的问题(即+0 和 -0),以8进制为例,int_8的取值范围应该是-127~ -0和+0~ 127 即存在正0 0000 0000 和 负 0 1000 0000 ,但是在两个0转换为补码后全部都变成了0000 0000,细心的你会说原来8位编码表示的256的二进制数在补码中不就少了一个吗?
对,当然是少了一个,对于1000 0000 ,任何原码都不能转换成补码后成为1000 0000的形式
但数是死的,人是活的,不能让XX憋死不是? 所以人为规定补码中 1000 0000 表示 -128 ,这就很好的解释了,为什么8位的整形变量的下溢下界会是-128而上溢上届是127了。
同样,对于16进制int,也是这样, 表示范围成了 - 32768 ~ 32767 (32768=2^16)
为什么int类型(16位)的下溢下限为-32768而上溢上限却是32767相关推荐
- C语言中int类型及位、字节和字的介绍
在C语言当中,整数类型和数学相同,例如8.27.-2.123都是整数.但需要注意的是,计算机是以二进制数存储整数,例如整数8以二进制1000储存在计算机中. 在计算机中,为了表示整数,提供了int类型 ...
- c语言那个类型是16位,c语言基本数据类型
1,常用数据类型及所占大小 short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 在32 位的系统上short 内存大小是2 个byte: ...
- getchar返回int类型
#include <stdio.h> /* copy input to output; 2nd version */ main() { int c; c = getchar(); whil ...
- C语言中的int类型的范围是由什么决定的
C语言中的int类型的范围是由什么决定的 在 K&R 经典教材 The C Programming Language 的2.2节中,对 int 类型是这样描述的 an integer, typ ...
- C语言int的位数是几位,C中的int总是32位吗?
这与以下问题有关, 如何在C中声明32位整数 有人提到int在大多数平台上总是32位的.我很好奇这是不是真的. 你知道有什么不同尺寸的现代平台吗?忽略具有8位或16位架构的恐龙平台. 注意:我已经知道 ...
- int 类型究竟多少字节?
今天发现NEON技术中 int类型的字节数是2,感觉很奇怪,最早写51单片机时也是2,后来到了观念转变成了4,现在有遇到了2. 一.转自 http://www.tuicool.com/articles ...
- 在c语言中以16位pc机为例一个,在C语言中(以16位pc机为例),一个char型数据在内...
话题:在C语言中(以16位pc机为例),一个char型数据在内存中所占字节回答:标准的C语言范中:char占一个字节int占4个字节话题:计算机中16位的数据如何存放在32位的寄存器中回答:如果是 w ...
- 关于C中的Int类型到底是几个字节。
C语言标准是这样规定的:int最少16位(2字节),long不能比int短,short不能比int长,具体位长由编译器开发商根据各种情况自己决定.在32位x86处理器上,short.int.long普 ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(4) - 8086/16位指令操作码字节
第一字节(BYTE1) 指令定义了处理器要执行的操作,例如ADD,XOR,HLT等.操作码通常位于第一字节,某些指令的操作码会扩展到第二字节(即ModR/M字节)的REG域,故有时候REG域也被称为R ...
- C Primer Plus 6th Edition第三章编程练习上溢下溢
3.11 编程练习 1.通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢.浮点数上溢和浮点数下溢的情况. int类型(整数类型)占用4字节,范围为-2^ 31 ~ 2^31-1 即-214 ...
最新文章
- Shiny平台构建与R包开发(五)——ui美化
- 送一些豆瓣 8.9 分优质书,啃完拿下 BAT 高薪 offer 不是梦!
- 研究SAP service order status存储字段
- 只有程序员才懂这些黑色幽默!
- 如何编译 dotnet/runtime 源代码
- redis-哈希数据类型
- 一起学Windows Phone7开发(十三.三 输入控件)
- 由c#事件监听、回调函数引发观察者模式
- WLAN/WIFI信道列表 2020-11-23
- 解决 Chrome最新版右键工具中的编码修改功能没有了的工具
- html实现图片轮播切换箭头,最简单jquery实现带左右箭头和数字焦点的图片轮播...
- 谷歌账号Gmail邮箱修改密码提示需要手机设备验证码如何处理
- 基于高德地图API渲染首页
- 计算机保研er历程分享(浙软、厦大、华师、东南网安、东北、西电、中南......)
- 怎么用计算机美元和人民币怎么换算,美金换算人民币计算器(人民币和美元换算)...
- [Angular] ng-alain的一些实践
- OA办公软件如何帮助企业更好地实现移动办公
- 单片微型计算机系统应用和开发特点,单片微机原理及应用--徐春辉---电子工业出版社习题答案.doc...
- 淘宝上传图片太大怎么办?怎么把图片压缩变小?
- 用java实现五子棋
热门文章
- WP短代码实现“chat”文章聊天形式 文章也能活跃起来
- 跨域单点登录解决方案
- Arduino框架下合宙ESP32C3 +1.8“TFT液晶屏通过TFT_eSPI库驱动显示
- 解决显示“此图片来自微信公众平台未经允许不可引用”错误图片
- SpringBoot三种实现邮箱发送功能
- android 遥控器 地址码,RK3128平台android系统修改添加遥控器键值码值
- 第10章项目干系人管理__权力利益分配
- 厦门大学计算机专业录取分数线2019,2019厦门大学各省录取分数线是多少
- 利用微信机器人 自动发送验证码
- presto字符串转日期