下面,我们描述一下用位来编码整数的两种不同方式:一种只能表示非负数,而另一种能表示负数、正数和零。

1、无符号数的编码

原理:无符号数编码的定义

对向量

函数

将一个长度为w的0,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]表示,也就是

,最小值用单位向量[00...00]表示,也就是整数
表示范围

原理:无符号数编码的唯一性,函数

是一个双射

函数

将每个长度为w的位向量映射为
之间的唯一值。反过来,
之间的每一个整数映射为一个唯一的长度为w的位模式。

2、补码编码

补码可以表示有符号数,补码的定义是将最高有效位解释为负权,用

表示。

原理:补码编码的定义

对向量

最高有效位

也被称为符合位,它的权重为
当符合位为1时,表示值为负,0表示非负,看示例:

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位补码能表示的最大值为

,最大值为
,同无符号表示一样,在可表示的取值范围内的每个数字都有一个唯一的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],这说明强制类型转换的结果是保持位值不变,只改变了解释这些位的方式。

原理:补码转换为无符号数

对满足

的 x 有:

比如,

原理:无符号数转化为补码

对满足

的 u 有:

总结:从公式可以看出,对于范围在

之间的值 x ,
,也就是说在这个范围内有相同的无符号和补码表示,对于这个范围以外的数值需要加上或减去

符号位扩展

MSB:最高有效位

截断

无符号加法运算

补码的加法运算

此图示例可以联系符号位扩展加以理解

无符号乘法

有符合乘法

浮点数表示

根据国际标准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)相关推荐

  1. 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 ...

  3. matlabk大于等于0如何表示_【底层原理】浮点数在计算机中是如何表示

    作者:阮一峰 编辑:www.ruanyifeng.com/blog/2010/06/ 码农有道 码农有道高质量技术文章目录整理(请戳我) 关于码农有道(请戳我) 前几天,面试的时候遇到一道C语言题: ...

  4. 取值范围_从int取值范围谈起

    int取值范围 我们在面试过程中,或者在准备面试过程中,可能会遇到这样一个问题: Java中int的取值范围是什么? 这个问题比较常见,也很简单,相信大部分Java开发人员都可以快速答上来: [ , ...

  5. 取值方法_数据维度爆炸怎么办?详解 5 大常用的特征选择方法

    公众号关注 "ML_NLP"设为 "星标",重磅干货,第一时间送达! 转自 | DataWhale 在许多机器学习相关的书里,很难找到关于特征选择的内容,因为特 ...

  6. 指数函数中x的取值范围_基本初等函数I: 指数函数、对数函数和幂函数

    本文大约4800字, 建议学习时间1个小时. 在学习过一次函数和二次函数(修改版)后, 我们知道, 一次函数y=kx+b当一次项系数k大于零时是增函数, 小于零时是减函数. 二次函数y=ax2+bx+ ...

  7. 指数函数中x的取值范围_谨记!高考数学中容易出错的几个地方

    高考生想要取得好的数学成绩必须要认真复习,在复习的时候大家要掌握一些内容,这样能使大家取得事半功倍的学习效果,下面小更为大家带来2019高考数学易犯的72个低级错误这篇内容,希望高考生能够认真阅读. ...

  8. 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...

  9. 2字节取值范围_C语言整数的取值范围以及数值溢出

    short.int.long 是C语言中常用的三种整数类型,分别称为短整型.整型.长整型.在现代操作系统中,short.int.long 的长度分别是 2.4.4 或者 8,它们只能存储有限的数值,当 ...

最新文章

  1. Hadoop概念学习系列之为什么hadoop/spark执行作业时,输出路径必须要不存在?(三十九)...
  2. oracle恢复是怎么看进度,Oracle中查看慢查询进度的脚本分享
  3. C#线程同步的几种方法
  4. “全宇宙首个”用中文编写的操作系统!作者还自创了甲、乙、丙编程语言?...
  5. Windows Azure Cloud Service (4) Windows Azure 平台高可用性的实现
  6. 使用dbutils对表进行增删改查
  7. 小程序 遮照 mask 背景透明,里面内容不透明
  8. android beta项目官方页面,安卓7.0开发者预览版如何安装?Android Beta项目正式上线...
  9. c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...
  10. list选取多个元素 python_python基础篇:list列表的操作大盘点
  11. windows dll 学习
  12. 【SSTFlashFlex51单片机烧录软件的使用方法】
  13. sip协议详解_SIP协议是什么 SIP协议实现机制介绍【详解】
  14. Android半透明+RGB颜色代码大全
  15. feedsky rss更新
  16. Python —— 爬取成果微博相册图片 ——明星
  17. 选择服务器系统,服务器系统选择
  18. 使用EndNote在Word中插入参考文献的格式设置
  19. Week15 作业 A - ZJM 与霍格沃兹 HDU - 1880
  20. 韦根w34是多少位_Levi's裤子尺码中的W34和L34各是多少厘米?

热门文章

  1. GridView,Repeater分页控件:WebPager(开源)
  2. 欧洲、加拿大、澳大利亚新增2.1万个点可购买比特币现金
  3. JavaScript数据运算
  4. Geoserver汉语版出来啦!!
  5. Login rule 权限规则设置自动跳转页面
  6. Delphi使程序的窗口出现在最前面并激活
  7. CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
  8. DevExpress.GridControl.gridView的一些注意
  9. 人会成为虚拟现实中的“机器人代码”吗?
  10. Yii “CDbConnection failed to open the DB connection: could not find driver解决办法