2字节取值范围_第二篇——整数和浮点数在计算机中的表示(2)
下面,我们描述一下用位来编码整数的两种不同方式:一种只能表示非负数,而另一种能表示负数、正数和零。
1、无符号数的编码
原理:无符号数编码的定义
对向量
函数
B2U( [0001] ) = 0*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1
B2U( [0101] ) = 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 5
B2U( [1111] ) = 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 15
这种编码方式最大值用单位向量[11...11]表示,也就是
原理:无符号数编码的唯一性,函数
函数
2、补码编码
补码可以表示有符号数,补码的定义是将最高有效位解释为负权,用
原理:补码编码的定义
对向量
最高有效位
B2T( [0001] ) = ﹣0*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1
B2T( [0101] ) =﹣0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 5
B2T( [1011] ) = ﹣1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = ﹣5
B2T( [1111] ) = ﹣1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = ﹣1
所以w位补码能表示的最大值为
原理:补码编码的唯一性,函数
关于整数数据类型的取值范围和表示,Java标准非常明确,要求用补码表示,单字节数据类型称为byte,而不是char,这些要求是为了保证无论在什么机器上运行,Java程序都能表现的完全一样。有符号数还有两种标准的表示方法——反码和原码
反码:除了最高有效位的权是
原码:最高有效位是符号位,
对于数字0,两种编码都把[00...00]解释为+0,但是值-0在原码中表示为[10...00],在反码中表示为[11...11]。几乎所有现代机器都使用补码。
3、有符号和无符号数之间的转换
考虑如下代码:
short int v = -12345;
unsigned short uv = (unsigned short) v;
printf("v = %d, uv = %un", v, uv);在一台采用补码的机器中,上述代码的输出为:
v = -12345,uv = 53191
而-12345的16位二进制表示为:[1100111111000111],53191的二进制位表示也是[1100111111000111],这说明强制类型转换的结果是保持位值不变,只改变了解释这些位的方式。
原理:补码转换为无符号数
对满足
比如,
原理:无符号数转化为补码
对满足
总结:从公式可以看出,对于范围在
符号位扩展
截断
无符号加法运算
补码的加法运算
无符号乘法
有符合乘法
浮点数表示
根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:
(1)符号:(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
(2)尾数:M表示有效数字,大于等于1,小于2。
(3)阶码:2^E表示指数位。
例如:十进制的6.0,写成二进制是110.0,相当于1.10×2^2。那么,按照上面V的格式,可以得出s=0,M=1.10,E=2。
十进制的-5.0,写成二进制是-101.0,相当于-1.01×2^2。那么,s=1,M=1.01,E=2。
(祖传结尾)
感谢作者Randal E. Bryant和David R. O'Hallaron
如有错漏之处望指出,推荐亲自阅读《深入理解计算机系统》
2字节取值范围_第二篇——整数和浮点数在计算机中的表示(2)相关推荐
- 2字节取值范围_高中数学:构造不等式,解析几何范围题的有效解法
有关范围问题,常要借助不等式去解.充分利用已知条件,挖掘题目中的隐含条件构造不等式便成为解范围题的关键.本文结合具体问题谈一下构造不等式的几种方法. 一.利用题目中已知不等式或常用的基本不等式构造不等 ...
- java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...
先看一段推理 +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +12 ...
- matlabk大于等于0如何表示_【底层原理】浮点数在计算机中是如何表示
作者:阮一峰 编辑:www.ruanyifeng.com/blog/2010/06/ 码农有道 码农有道高质量技术文章目录整理(请戳我) 关于码农有道(请戳我) 前几天,面试的时候遇到一道C语言题: ...
- 取值范围_从int取值范围谈起
int取值范围 我们在面试过程中,或者在准备面试过程中,可能会遇到这样一个问题: Java中int的取值范围是什么? 这个问题比较常见,也很简单,相信大部分Java开发人员都可以快速答上来: [ , ...
- 取值方法_数据维度爆炸怎么办?详解 5 大常用的特征选择方法
公众号关注 "ML_NLP"设为 "星标",重磅干货,第一时间送达! 转自 | DataWhale 在许多机器学习相关的书里,很难找到关于特征选择的内容,因为特 ...
- 指数函数中x的取值范围_基本初等函数I: 指数函数、对数函数和幂函数
本文大约4800字, 建议学习时间1个小时. 在学习过一次函数和二次函数(修改版)后, 我们知道, 一次函数y=kx+b当一次项系数k大于零时是增函数, 小于零时是减函数. 二次函数y=ax2+bx+ ...
- 指数函数中x的取值范围_谨记!高考数学中容易出错的几个地方
高考生想要取得好的数学成绩必须要认真复习,在复习的时候大家要掌握一些内容,这样能使大家取得事半功倍的学习效果,下面小更为大家带来2019高考数学易犯的72个低级错误这篇内容,希望高考生能够认真阅读. ...
- 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...
- 2字节取值范围_C语言整数的取值范围以及数值溢出
short.int.long 是C语言中常用的三种整数类型,分别称为短整型.整型.长整型.在现代操作系统中,short.int.long 的长度分别是 2.4.4 或者 8,它们只能存储有限的数值,当 ...
最新文章
- Hadoop概念学习系列之为什么hadoop/spark执行作业时,输出路径必须要不存在?(三十九)...
- oracle恢复是怎么看进度,Oracle中查看慢查询进度的脚本分享
- C#线程同步的几种方法
- “全宇宙首个”用中文编写的操作系统!作者还自创了甲、乙、丙编程语言?...
- Windows Azure Cloud Service (4) Windows Azure 平台高可用性的实现
- 使用dbutils对表进行增删改查
- 小程序 遮照 mask 背景透明,里面内容不透明
- android beta项目官方页面,安卓7.0开发者预览版如何安装?Android Beta项目正式上线...
- c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...
- list选取多个元素 python_python基础篇:list列表的操作大盘点
- windows dll 学习
- 【SSTFlashFlex51单片机烧录软件的使用方法】
- sip协议详解_SIP协议是什么 SIP协议实现机制介绍【详解】
- Android半透明+RGB颜色代码大全
- feedsky rss更新
- Python —— 爬取成果微博相册图片 ——明星
- 选择服务器系统,服务器系统选择
- 使用EndNote在Word中插入参考文献的格式设置
- Week15 作业 A - ZJM 与霍格沃兹 HDU - 1880
- 韦根w34是多少位_Levi's裤子尺码中的W34和L34各是多少厘米?
热门文章
- GridView,Repeater分页控件:WebPager(开源)
- 欧洲、加拿大、澳大利亚新增2.1万个点可购买比特币现金
- JavaScript数据运算
- Geoserver汉语版出来啦!!
- Login rule 权限规则设置自动跳转页面
- Delphi使程序的窗口出现在最前面并激活
- CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
- DevExpress.GridControl.gridView的一些注意
- 人会成为虚拟现实中的“机器人代码”吗?
- Yii “CDbConnection failed to open the DB connection: could not find driver解决办法