补码

补码

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

3.经常使用数值编码

因为机器数在计算时,假设符号位和数值位同一时候參与运算,则可能会产生错误结果;而假设单独考虑符号问题,又会添加运算器件的实现难度。因此,为了使计算机可以方便地对数值进行各种算术逻辑运算,必须对数值型数据进行二进制编码处理。所谓编码是採用少量的基本符号(如01),依照一定的组合原则,来表示大量复杂多样的信息的技术。编码的优劣直接影响到计算机处理信息的速度。数值型数据的经常使用编码方法包含:原码、反码、补码。

1)原码。原码的编码规则是:符号位0表示正,1表示负,数值部分用该数绝对值的二进制数表示。当整数时,小数点隐含在最低位之后;当纯小数时,小数点隐含在符号位和数值位之间,均不占位。通经常使用[X]表示数X的原码。

比如,设机器字长为8位,

[+1] = 00000001         [+127] = 01111111       [+0] = 00000000

[ 1] = 10000001        [ 127] = 11111111       [ 0] = 10000000

显然,按原码的编码规则,零有两种表示形式。

原码表示法简明易懂,与其真值的转换方便,比較easy进行乘除运算。可是在进行加减运算时,原码运算非常不方便。因为符号位不能和数值一样參与运算,所以要依据两数的符号情况,同号相加,异号相减,还要依据两数的绝对值大小,令大数减去小数,最后还要推断结果的符号。这样不仅要求运算器既能作加法,又能作减法,还必须附加很多条件推断的处理,终于既添加了运算器的实现复杂性,又延长了运算的时间。

2)反码。反码的编码规则是:符号位0表示正,1表示负,正数的反码等于原码,负数的反码等于原码除符号位外按位取反,即0110。通经常使用[X]表示数X的反码。

比如,设机器字长为8位,

[+1] = 00000001         [+127] = 01111111       [+0] = 00000000 

[ 1] = 11111110          [ 127] = 10000000     [ 0] = 11111111

显然,按反码的编码规则,零也有两种表示形式。

反码非常easy由原码获得,但相同不方便运算,一般在求补码的过程中用到反码。

3)补码。补码的编码规则是:符号位0表示正,1表示负,正数的补码等于原码,负数的补码等于反码末位加1。通经常使用[X]表示数X的补码。

比如,设机器字长为8位,

[+1] = 00000001         [+127] = 01111111       [+0] = 00000000

[ 1] = 11111111          [ 127] = 10000001     [ 0] = 00000000

显然,按补码的编码规则,零有惟一的表示形式。

补码的概念来源于数学上的和补数。比如,将钟表的时针顺时针拨快5小时和逆时针拨慢7小时,最后指示的位置同样,则称57互为模12情况下的补数。计算机中机器数受机器字长限制,所以是有限字长的数字系统。对于整数来说,机器字长为n位(含符号位),模是2n;对于有符号纯小数来说,模是2

求补运算通常利用反码来实现。

【例】 X = +1011Y = 1101的原码、反码和补码。

    [X] = 01011                [Y] = 11101

       [X] = 01011                [Y] = 10010

       [X] = 01011                [Y] = 10011

採用补码进行加减运算十分方便。通过对负数的编码处理,同意符号位和数值一起參与运算,能够把减法运算转化为加法运算。不论求和求差,也不论操作数为正为负,运算时一律仅仅做加法,从而大大简化运算器的设计,加快了运算速度。

比如,(9)+(5)的运算例如以下:

[9] = 11110111                  11110111

[5] = 11111011           +     11111011

                                      111110010

由于机器字长的限制,丢失高位1,运算结果机器数为11110010,是14的补码形式。

眼下,因为计算机中最多的运算是加减运算,为了简化运算器设计,加快运算速度,有些计算机在数值表示、存储、运算时均採用补码表示法,也有些计算机,数用原码进行存储和传送,运算时採用补码,还有些计算机在进行加减法时採用补码运算,而在进行乘除法时採用原码运算。

4.精度和溢出

现代数字计算机是有限字长的数字系统,机器数表示的范围受到机器字长和数据类型的限制,一旦机器字长和数据类型确定了,机器数所能表示的数的范围和精度也就确定了。所谓精度,是指能够给出的有效数字的位数。一般来说,机器字长越长,能够表示的数的范围越大,精度越高;当字长同样时,浮点数通常比整数能够表示的数的范围要大;浮点数表示时,阶码位数越多,能够表示的数的范围越大,尾数位数越多,能够表示的数的精度越高。

假设一个数的大小超出了计算机所能表示的数的范围,则产生溢出。假设两个正数相加,结果大于机器所能表示的最大正数,称为上溢;假设两个负数相加,结果小于机器所能表示的最小负数,称为下溢。比如,字长为n位的有符号整数,最高1位为符号位,数值位为n1位,用补码表示时,数的表示范围为2n–1~2n–11,一旦运算时发生结果超出此范围的情况,就产生溢出。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118005.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【机器学习】几种相似度算法分析

    最近开始研究推荐系统,其中常见的相似度算法有以下几种:1.欧几里得距离欧几里得度量(euclideanmetric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。注意事项:a.因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高…

    2022年4月4日
    44
  • empty和isset的区别

    empty和isset的区别

    2021年10月30日
    44
  • dropdownlist控件绑定数据库_凡科可以绑定数据库吗

    dropdownlist控件绑定数据库_凡科可以绑定数据库吗DropDownList1.DataSource=myReader;//myReader为ExecuteReader()的结果集DropDownList1.DataTextField(DataValueField)=”填充在myReader中的数据集,用哪个列填充就写哪个列名就ok了”;DropDownList1.DataBind();aspx页面上有三个DropDownLi

    2022年10月8日
    1
  • 附pdf下载 |《深度强化学习实战》(含最新源代码)

    附pdf下载 |《深度强化学习实战》(含最新源代码)

    2020年11月14日
    403
  • Socket粘包问题「建议收藏」

    Socket粘包问题「建议收藏」什么时候要考虑粘包问题1.:如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题(因为只有一种包结构,类似于http协议)。关闭连接主要要双方都发送close连接(参考tcp关闭协议)。如:A需要发送一段字符串给B,那么A与B建立连接,然后发送双方都默认好的协议字符如”hellogivemesthabouryourself”,然后

    2022年8月11日
    4
  • java 实用 代码_java新手实用代码有哪些?java新手代码大全「建议收藏」

    java 实用 代码_java新手实用代码有哪些?java新手代码大全「建议收藏」对于java新手来说,积累一些实用的基础代码还是很有必要的,毕竟写代码是需要实践以及积累的,那么接下来,我们就来给大家分享一些java新手代码给大家参考!1.字符串有整型的相互转换Stringa=String.valueOf(2);//integertonumericstringinti=Integer.parseInt(a);//numericstringtoan…

    2022年6月21日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号