补码

作者: NextStepPeng | 来源:发表于2018-04-19 10:31 被阅读0次
 有符号
便于理解

为简化起见,我们8位二进制数来讲。

先看8位二进制与无符号数和有符号数的对应

二进制 无符号 有符号

00000000 0 0

00000001 1 1

...

01111110 126 126

01111111 127 127

10000000 128 -128

10000001 129 -127

...

11111110 254 -2

11111111 255 -1

按照上述对应关系,我们可以把二进制运算解释为有符号或无符号的十进制运算。

只有算术运算才会有正负号问题,而算术运算中最主要的就是加法系列指令和减法系列指令。范围内的运算咱们不关心,主要看看超出范围的运算如何处理。

当运算超出范围后,CPU会改变标志寄存器中的值(置1),来表示当前的运算结果。算术运算主要用到的标志位如下。

OV(溢出):运算结果超过数值表达范围(比如8位数运算超过256);

ZR(零):运算结果为0时;

PL(符号):运算结果的最高位为1。

AC(辅助进位):低4位是否向高4位进/借位;

CY(进位):高位进/借位;

1. 当加法系指令的二进制结果大于11111111时会产生溢出,结果保留超过11111111的部分,并置溢出位为1。

例如加法add指令:

11111110+00000011=100000001=>00000001

标志位:

由于低4位和高4位都进位了,所以AC和CY置1

对应的无符号运算:

254+3=1

对应的有符号运算:

-2+3=1

2.  减法系的指令会产生“减不过”的情况。减不过时cpu会给左数的最高位添加一个1,使得比右数大,再做减法并置溢出。

例如减法sub指令:

00000010-00000011=>100000010-00000011=11111111

标志位:

由于低4位和高4位都借位了,所以AC和CY置1,由于运算结果高位为1,PL置1

对应的无符号运算:

2-3=255

对应的有符号运算:

2-3=-1

相关文章

  • 汇编

    补码 在求补码 得真值

  • 关于补码_2019-03-29

    整数的补码正数的补码正数的补码等于源码负数的补码负数的补码:源码中符号位保持不变,其余各位取反后再加1 小数小数的...

  • 2018-10-22 Python31 原码、反码、补码

    原码、反码、补码 1)如何计算补码?规则: 正数:原码 = 反码 = 补码负数:反码 = 符号位不变,其他位取反补...

  • 原码,反码,补码杂谈

    本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等...

  • 原码、反码、补码和移码

    书中关于原码、反码、补码和移码的定义如下(n是机器字长):原码: 反码: 补码: 移码: 原码, 反码, 补码的基...

  • Java中的非运算~

    涉及到的概念:原码、补码涉及到的公式: (1)正数的原码 = 补码;(2)负数的 补码 = ( 原码 - 1 )再...

  • 数值是以补码表示的

    正数的补码与原补码相同 负数的补码:将该数的绝对值的二进制数按位取反后再加1 例如:求-10的补码 10的原码: ...

  • int数字的表示

    在计算机中int型数字使用补码的形式在存储。首先说明补码的计算方式。正数和零的补码就是他们本身。负数的补码是符号位...

  • 补码

    原码、反码、补码 原码:符号位 反码:减法变加法 补码:+1解决-0问题 数学原理 同余 反码:mod127 补码...

  • 6-三码合一&位运算

    1.原/反/补码! 数据在计算机内部是以补码的形式储存的对于正数:反码====补码====原码。对于负数:反码==...

网友评论

      本文标题:补码

      本文链接:https://www.haomeiwen.com/subject/pmnikftx.html