数分为正数和负数,计算机中的数是用二进制来表示的,数的符号也用二进制来表示,所谓带符号数就是最高位是符号位,一般规定正数的符号位为0,负数的符号位为1.
把一个数连同其符号在内数值化表示叫机器数,机器数的表示可以用不同的码制,常用的有原码、补码、反码。
补码:
首先,我们需要了解一下补码的表示方式:
正数的补码就是其本身
负数的补码有两种变换方式:
-
是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
-
是在其正数的基础上,各位取反(包含符号位)、+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
百度百科-补码