[计基]-二进制之补码

2018-08-17  本文已影响58人  Sunxxxxx丶

一.基础名词

原码 : 0011

反码 :
0011(原码) >> 1100(反码) (原码按位取反)

补码 :
0011(原码) >> 0011(补码) (正数的补码是自己)
-0101(原码) >> 1011(补码) (负数的补码是原码按位取反加一)

二.补码作用

1.将减法转化成加法

因为运算器进行加法是最快的.

2.用二进制数表示负数

计算机只识别0和1.不认识负号和正号.如1011表示-5

三.例子

计算机内部运算减法的时候其实是转成加法来运算的.

例子一:
我们先来看十进制下怎么将减法转成加法:
如34-12可以进行如下转换

34 - 12 

= 34 + ( -12 ) 

= 34 + ( -12 ) + 99 + 1 - 100 

// 1.(99 - 12 + 1)即求补数.
// 在十进制里求补数还是用到了减法.
// 但是二进制求补数就不需要使用减法了. 

// 2.此处的100高位溢出了.省略百位的1.即0;
= 34 + ( 99 -  12 + 1) - 100  

= 34 + 88

// 此处的122高位溢出了.省略百位的1.即22
= 122

= 22

例子二:
然后我们再来看下二进制怎么将减法转成加法:
如0011 - 0001可以进行如下转换

0011 - 0001

= 0011 + (-0001)

= 0011 + (-0001) + 1111 + 0001 - 10000

// 1.( 1111 - 0001 + 0001) 即求补数.
// 但是1111-0001即对0001取反.
// 所以此处无需使用减法

// 2.此处的10000高位溢出了.省略最高位.即0000;
= 0011 + ( 1111 - 0001 + 0001) - 10000

// ( 1111 - 0001 + 0001) >> 1111 即对-0001取反加1
= 0011 + 1111

// 此处高位溢出.省略高位
= 10010

= 0010

// 转成十进制
= 2

总结: 二进制减法a-b 可以转化为 a + b的补码

例子三:
前面一个例子是大数减小数.
那现在我们用前面得出的结论来计算小数减大数

0001 - 0011

// -0011求补码即1101
= 0001 + 1101 

// 符号位为1.即结果为负数.
= 1110

// 负数的原码: 保留正负号.求补码
= - (0010) 

// 转成十进制
=  -2
上一篇 下一篇

猜你喜欢

热点阅读