原码
原码是二进制表示法的最基本形式
它直接用来表示整数的符号位和数值位
最左边的是符号位,1表示负数,0表示正数
[10011000]是负数
[00011000]是正数
反码
反码是为了解决原码的正负数相加减出现溢出问题而引入的一种表示方法
反码是将原码的符号位保持不变,其余位数按位取反
补码
补码是为了解决原码和反码都无法完全解决正负数相加减溢出的问题而引入的一种表示方法
补码的特点是将原码的符号位不变,其他位取反后再加上1
原码、反码、补码的转化
正数的原码、反码、补码相同
负数的
[1001 1000] 原
[1110 0111] 反
[1110 1000] 补
最左边那位是符号位,保持不变
加法运算
00011100[原] + 10001100[原]
上面两个数都是带符号的原码
第一步:
将原码转换为补码,正数的补码相同,1000 1100的补码为1111 0100
第二步:
进行加法运算 0001110[补] + 11110100[补] = 100100000[补](9位)
原来的数是八位,结果变成了九位,最高位溢出,保留低8位,即 0010 0000
第三步:
将结果变为原码,因为正数的补码和原码相同不用变
00011100[原] + 10001100[原] = 0010 0000[原]
减法运算
减法运算可以转化为补码的加法运算
00011100[原] - 10001100[原]
第一步:
变成加法运算,减数的符号位取反
00011100[原] + 00001100[原]
第二步:
转化为补码,正数补码相同
00011100[补] + 00001100[补]
第三步:
进行加法运算
0001 1100[补] + 0000 1100[补] = 0010 1000[补]
第四步:
转化成原码,正数原码相同
0001 1100[原] - 1000 1100[原] = 0010 1000[原]