补码运算的那些事儿

数分为正数和负数,计算机中的数是用二进制来表示的,数的符号也用二进制来表示,所谓带符号数就是最高位是符号位,一般规定正数的符号位为0,负数的符号位为1.
把一个数连同其符号在内数值化表示叫机器数,机器数的表示可以用不同的码制,常用的有原码、补码、反码。

补码:

首先,我们需要了解一下补码的表示方式:

正数的补码就是其本身

负数的补码有两种变换方式:

  1. 是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

  2. 是在其正数的基础上,各位取反(包含符号位)、+1

例如:
[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

  

[+0] = [00000000]原 = [00000000]反 = [00000000]补

[-0] = [10000000]原 = [11111111]反 = [00000000]补
[+127] = [01111111]原 = [01111111]反 = [01111111]补

[-127] = [11111111]原 = [10000000]反 = [10000001]补

运算:

补码加法:

[X+Y]补 = [X]补+[Y]补

例:X = +0110011,Y=-0101001,求[X+Y]补

[X]补 = 00110011     [Y]补 = 11010111

[X+Y] = [X]补 + [Y]补 = 00110011 + 11010111 = 00001010

注:因为计算机中运算器的位长是固定的(定长运算),上述运算中产生的最高位进位将丢掉,所以结果不是100001010而是00001010.

补码减法:

[X-Y]补 = [X]补  - [Y]补 = [X]补 + [-Y]补

例:1 -1 [十进制]

1 的补码 :00000001

-1的补码:11111111

1 + (-1) = 00000001 + 11111111 =00000000 = 0

例:-7 - (-10)[十进制]

改为加法形式: -7 -(-10) = -7 + (-(-10))

-7的补码:11111001

-(-10)的补码:-10的原码为10001010,-(-10)的原码为00001010

-(-10) 的补码就是其原码:00001010

-7-(-10)=11111001 + 00001010 = 00000011 = 3

资料:

http://www.doc88.com/p-3743481807692.html?tdsourcetag=s_pcqq_aiomsg

http://www.renrendoc.com/p-19508643.html

https://blog.csdn.net/leoe_/article/details/79096568

百度百科-补码

原文地址:https://www.cnblogs.com/adongyo/p/11490338.html