有符号二进制数的表示是这样的:如果计算机的字长为n位,n位二进制数的最高位为符号位。其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是 -2的(n-1)次幂 <= X <= 2的(n-1)次幂-1。如果字长是16位,补码表示的范围就是 -2的15次幂 <= X <= 2的15次幂-1,也即可表示的范围是-32768到32767。

计算机中二进制表示有原码、反码、补码表示。

原码是指将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。

反码表示规则为:如果是正数,则表示方法和原码一样;如果是负数,则保留符号位1,然后将这个数字的原码按照每位取反,则得到这个数字的反码表示形式。

补码是计算机表示数据的一般方式,其规则为:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。

所以正数的原码、反码、补码是相同的,32767二进制原码表示是0 111 1111 1111 1111,所以反码、补码表示都是0 111 1111 1111 1111;

由原码定义可知十进制负数-32768在16位计算机中是表示不出来的,1111 1111 1111 1111表示的是-32767,但我们知道32768的原码是1 000 0000 0000 0000,其反码是0 111 1111 1111 1111,补码是1 000 0000 0000 0000,由补码定义可知恰好表示-32768。

两个有符号数进行加减运算时,如果运算结果超过可表示的有符号数的范围时,就会发生溢出,使计算机结果出错。很显然,溢出只能出现在两个同号数相加或两个异号数相减的情况。所以两正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数(减法其实就是两个负数相加)。

-1用补码表示是1111 1111 1111 1111,即1000 0000 0000 0000 + 1111 1111 1111 1111时最高位有进位输出时,发生了溢出,形成了0111 1111 1111 1111,这就是有符号十进制数32767的二进制表示法,结果当然是32767了。

全部

c语言存储大范围整形,C语言整形数值范围问题相关推荐

  1. c语言存储类型重要吗,C语言储存类别(Storage Class)

    C语言存储类别(Storage Class) C语言中,存储类别(Storage Class)是一个标识符(也就是说函数和变量)的重要属性.存储类别决定着一个函数或变量的作用域(Scope,即可见性) ...

  2. 后端语言c,大前端的后端语言

    前端基本 1.ES5 ES6 ES7 2.html5 css3 3.Less 和 Sass 4.SVG Canvas D3.js //图形数据可视化 5.WebGL Three.js 3d场景 6.C ...

  3. c语言存储类型关键字作用,C语言, 存储类型关键字?

    1.C语言的数据类型分类 C语言的数据类型分类: 基本数据类型: 整型int 字符型char 浮点型: 单精度浮点型float 双精度浮点型double 构造数据类型: 数组(如int a[]) 结构 ...

  4. c语言存储类型关键字作用,c语言学习笔记.关键字.存储类型关键字等

    关键字const 1.修饰变量. 修饰的对象为常量,只读. 2.修饰指针. const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据. const 离变量名近就是用来修 ...

  5. c语言期末大作业报告,c语言大作业报告.docx

    Document serial number[UU89WT-UU98YT-UU8CB-UUUT-UUT108] Document serial number[UU89WT-UU98YT-UU8CB-U ...

  6. 零基础学python还是c语言-为什么大一先学C语言,而不是Python,你知道为什么吗?...

    C语言作为Linux的基础语言是初学者的首选,因为CS世界是以Linux等UNIX家族系统为主的世界,它们的编译环境基本都默认gcc,很多系统都是基于C或者C类语言写出来的(Linux用的C,mac用 ...

  7. c语言万年历大作业报告,C语言万年历设计报告

    <C语言万年历设计报告>由会员分享,可在线阅读,更多相关<C语言万年历设计报告(14页珍藏版)>请在人人文库网上搜索. 1.C 语言课程 设计报告 题目:编写万年历系统编写万年 ...

  8. c语言存储多个数据,C语言中如何求数组真实存有数据的元素个数

    这个是比较容易解决的,这是我把楼主的程序略加修改后的代码: # include # include # include int main() { int a[100]; int n; int i; i ...

  9. c语言存储图像jpg,用c语言如何读取和保存jpg图片文件?

    匿名用户 1级 2012-08-11 回答 有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下: 无关数据区 JPG图片数据区 无关数据区 JPG图片数据区 无关数据区 ...

最新文章

  1. java中数组的复制
  2. 使用 Flash Builder 的 Apple iOS 开发过程
  3. 【C语言练习】求两个数m和n的最大公约数(辗转相除法)
  4. 敏捷 冲刺_在这个敏捷的假期季节给予技术债务冲刺的礼物
  5. 为何setRequestMethod(GET)不生效
  6. mysql workbench 从model建库_使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结...
  7. java excel自动保存_java读取excel的内容(可保存到数据库中)
  8. python getopt_python 5种 statsPython中的getopt函数使用详解
  9. itest听力答案2020_2020英语一真题和答案
  10. Please define INSTALL4J_JAVA_HOME to point to a suitable JVM 的解决办法
  11. python实现一个简单的网上购物系统
  12. 闪迪u盘不能识别好办法_闪迪u盘修复工具,小编教你怎么修复闪迪U盘
  13. 计算机被管理员限制怎么解除,Win10系统管理员账户被禁用如何解除?
  14. Arduino Nano开发板设备描述符无法识别等问题汇总
  15. sam卡和sim卡区别_SAM卡
  16. 【实例学模式】一针见血装饰器模式
  17. Android打开WIFI、关闭WIFI、检测当前WIFI状态
  18. SR研究(1)RCAN论文阅读上
  19. delta和gamma中性_在期权交易中,Delta、Gamma、Theta、Vega都是什么?
  20. 环境土壤物理模型HYDRUS建模方法与多案例应用

热门文章

  1. PHP新手上路(十)
  2. VB.NET 中的 As New 以及型別指定
  3. linux的系统移植——内核启动
  4. Java 面向对象语言基础
  5. openvino安装小记
  6. android webview fragment,android studio中Fragment使用webview返回上一頁的問題
  7. meanshift算法 java_Meanshift,聚类算法
  8. css线加点的进度,纯CSS实现的交互式进度条(点击带进度填充动画)
  9. sql中排序序号_SQL 和 SPL 的有序运算对比
  10. Opencv中的Laplacian(拉普拉斯算法)