原文地址: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相关推荐

  1. C语言中int类型及位、字节和字的介绍

    在C语言当中,整数类型和数学相同,例如8.27.-2.123都是整数.但需要注意的是,计算机是以二进制数存储整数,例如整数8以二进制1000储存在计算机中. 在计算机中,为了表示整数,提供了int类型 ...

  2. c语言那个类型是16位,c语言基本数据类型

    1,常用数据类型及所占大小 short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 在32 位的系统上short 内存大小是2 个byte: ...

  3. getchar返回int类型

    #include <stdio.h> /* copy input to output; 2nd version */ main() { int c; c = getchar(); whil ...

  4. C语言中的int类型的范围是由什么决定的

    C语言中的int类型的范围是由什么决定的 在 K&R 经典教材 The C Programming Language 的2.2节中,对 int 类型是这样描述的 an integer, typ ...

  5. C语言int的位数是几位,C中的int总是32位吗?

    这与以下问题有关, 如何在C中声明32位整数 有人提到int在大多数平台上总是32位的.我很好奇这是不是真的. 你知道有什么不同尺寸的现代平台吗?忽略具有8位或16位架构的恐龙平台. 注意:我已经知道 ...

  6. int 类型究竟多少字节?

    今天发现NEON技术中 int类型的字节数是2,感觉很奇怪,最早写51单片机时也是2,后来到了观念转变成了4,现在有遇到了2. 一.转自 http://www.tuicool.com/articles ...

  7. 在c语言中以16位pc机为例一个,在C语言中(以16位pc机为例),一个char型数据在内...

    话题:在C语言中(以16位pc机为例),一个char型数据在内存中所占字节回答:标准的C语言范中:char占一个字节int占4个字节话题:计算机中16位的数据如何存放在32位的寄存器中回答:如果是 w ...

  8. 关于C中的Int类型到底是几个字节。

    C语言标准是这样规定的:int最少16位(2字节),long不能比int短,short不能比int长,具体位长由编译器开发商根据各种情况自己决定.在32位x86处理器上,short.int.long普 ...

  9. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(4) - 8086/16位指令操作码字节

    第一字节(BYTE1) 指令定义了处理器要执行的操作,例如ADD,XOR,HLT等.操作码通常位于第一字节,某些指令的操作码会扩展到第二字节(即ModR/M字节)的REG域,故有时候REG域也被称为R ...

  10. C Primer Plus 6th Edition第三章编程练习上溢下溢

    3.11 编程练习 1.通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢.浮点数上溢和浮点数下溢的情况. int类型(整数类型)占用4字节,范围为-2^ 31 ~ 2^31-1 即-214 ...

最新文章

  1. Shiny平台构建与R包开发(五)——ui美化
  2. 送一些豆瓣 8.9 分优质书,啃完拿下 BAT 高薪 offer 不是梦!
  3. 研究SAP service order status存储字段
  4. 只有程序员才懂这些黑色幽默!
  5. 如何编译 dotnet/runtime 源代码
  6. redis-哈希数据类型
  7. 一起学Windows Phone7开发(十三.三 输入控件)
  8. 由c#事件监听、回调函数引发观察者模式
  9. WLAN/WIFI信道列表 2020-11-23
  10. 解决 Chrome最新版右键工具中的编码修改功能没有了的工具
  11. html实现图片轮播切换箭头,最简单jquery实现带左右箭头和数字焦点的图片轮播...
  12. 谷歌账号Gmail邮箱修改密码提示需要手机设备验证码如何处理
  13. 基于高德地图API渲染首页
  14. 计算机保研er历程分享(浙软、厦大、华师、东南网安、东北、西电、中南......)
  15. 怎么用计算机美元和人民币怎么换算,美金换算人民币计算器(人民币和美元换算)...
  16. [Angular] ng-alain的一些实践
  17. OA办公软件如何帮助企业更好地实现移动办公
  18. 单片微型计算机系统应用和开发特点,单片微机原理及应用--徐春辉---电子工业出版社习题答案.doc...
  19. 淘宝上传图片太大怎么办?怎么把图片压缩变小?
  20. 用java实现五子棋

热门文章

  1. WP短代码实现“chat”文章聊天形式 文章也能活跃起来
  2. 跨域单点登录解决方案
  3. Arduino框架下合宙ESP32C3 +1.8“TFT液晶屏通过TFT_eSPI库驱动显示
  4. 解决显示“此图片来自微信公众平台未经允许不可引用”错误图片
  5. SpringBoot三种实现邮箱发送功能
  6. android 遥控器 地址码,RK3128平台android系统修改添加遥控器键值码值
  7. 第10章项目干系人管理__权力利益分配
  8. 厦门大学计算机专业录取分数线2019,2019厦门大学各省录取分数线是多少
  9. 利用微信机器人 自动发送验证码
  10. presto字符串转日期