c语言存储大范围整形,C语言整形数值范围问题
有符号二进制数的表示是这样的:如果计算机的字长为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语言整形数值范围问题相关推荐
- c语言存储类型重要吗,C语言储存类别(Storage Class)
C语言存储类别(Storage Class) C语言中,存储类别(Storage Class)是一个标识符(也就是说函数和变量)的重要属性.存储类别决定着一个函数或变量的作用域(Scope,即可见性) ...
- 后端语言c,大前端的后端语言
前端基本 1.ES5 ES6 ES7 2.html5 css3 3.Less 和 Sass 4.SVG Canvas D3.js //图形数据可视化 5.WebGL Three.js 3d场景 6.C ...
- c语言存储类型关键字作用,C语言, 存储类型关键字?
1.C语言的数据类型分类 C语言的数据类型分类: 基本数据类型: 整型int 字符型char 浮点型: 单精度浮点型float 双精度浮点型double 构造数据类型: 数组(如int a[]) 结构 ...
- c语言存储类型关键字作用,c语言学习笔记.关键字.存储类型关键字等
关键字const 1.修饰变量. 修饰的对象为常量,只读. 2.修饰指针. const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据. const 离变量名近就是用来修 ...
- c语言期末大作业报告,c语言大作业报告.docx
Document serial number[UU89WT-UU98YT-UU8CB-UUUT-UUT108] Document serial number[UU89WT-UU98YT-UU8CB-U ...
- 零基础学python还是c语言-为什么大一先学C语言,而不是Python,你知道为什么吗?...
C语言作为Linux的基础语言是初学者的首选,因为CS世界是以Linux等UNIX家族系统为主的世界,它们的编译环境基本都默认gcc,很多系统都是基于C或者C类语言写出来的(Linux用的C,mac用 ...
- c语言万年历大作业报告,C语言万年历设计报告
<C语言万年历设计报告>由会员分享,可在线阅读,更多相关<C语言万年历设计报告(14页珍藏版)>请在人人文库网上搜索. 1.C 语言课程 设计报告 题目:编写万年历系统编写万年 ...
- c语言存储多个数据,C语言中如何求数组真实存有数据的元素个数
这个是比较容易解决的,这是我把楼主的程序略加修改后的代码: # include # include # include int main() { int a[100]; int n; int i; i ...
- c语言存储图像jpg,用c语言如何读取和保存jpg图片文件?
匿名用户 1级 2012-08-11 回答 有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下: 无关数据区 JPG图片数据区 无关数据区 JPG图片数据区 无关数据区 ...
最新文章
- java中数组的复制
- 使用 Flash Builder 的 Apple iOS 开发过程
- 【C语言练习】求两个数m和n的最大公约数(辗转相除法)
- 敏捷 冲刺_在这个敏捷的假期季节给予技术债务冲刺的礼物
- 为何setRequestMethod(GET)不生效
- mysql workbench 从model建库_使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结...
- java excel自动保存_java读取excel的内容(可保存到数据库中)
- python getopt_python 5种 statsPython中的getopt函数使用详解
- itest听力答案2020_2020英语一真题和答案
- Please define INSTALL4J_JAVA_HOME to point to a suitable JVM 的解决办法
- python实现一个简单的网上购物系统
- 闪迪u盘不能识别好办法_闪迪u盘修复工具,小编教你怎么修复闪迪U盘
- 计算机被管理员限制怎么解除,Win10系统管理员账户被禁用如何解除?
- Arduino Nano开发板设备描述符无法识别等问题汇总
- sam卡和sim卡区别_SAM卡
- 【实例学模式】一针见血装饰器模式
- Android打开WIFI、关闭WIFI、检测当前WIFI状态
- SR研究(1)RCAN论文阅读上
- delta和gamma中性_在期权交易中,Delta、Gamma、Theta、Vega都是什么?
- 环境土壤物理模型HYDRUS建模方法与多案例应用