计算机中的补码是什么?

欢迎关注Julia语言微信公众账号 julia_language

原文链接:http://suo.im/4SltFb

简介

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

  • 正整数的补码是其二进制表示,与原码相同
  • 求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1

具体怎么算

Julia中,可直接在二进制,八进制和十六进制数前面加上一个负号 - ,就可以获得其补码:

julia> -0x5
0xfb

julia> -0x0002
0xfffe

-0x5是16进制的-5,且类型是UInt8。将其对应正数(也就是5)用二进制表示就是0000 0101。然后按位取反变为1111 1010,然后再加1,变为1111 1011。转换为16进制就是0xfb。

-0x0002是6进制的-2,且类型是UInt16。将其对应正数(也就是2)用二进制表示就是0000 0000 0000 0010。然后按位取反变为1111 1111 1111 1101,然后再加1,变为1111 1111 1111 1110。转换为16进制就是0xfffe。

为什么要有补码

原因很简单,如果使用补码表示负整数,那么算术逻辑单元ALU(Arithmetic and Logic Unit)在做整数之间的操作时,就不用区分符号了,所有位都会参与运算。

例如执行2-1这个操作,我们可以用2+(-1)来计算。
2的二进制数是:00000010
1的二进制数是:00000001 --> -1的二进制补码是:11111111
所以2+(-1):

  00000010
+ 11111111
----------------
  00000001

求1-2的结果,用1+(-2)来计算。
2的二进制数是:00000010,所以-2的二进制数为:11111101+1=11111110
1+(-2)的计算过程是:

  00000001
+ 11111110
---------------
  11111111

首位是1,说明是个负数,即是使用补码表示的,将各位取反(00000000)加1后的结果是00000001=1(十进制),然后加上他的符号,就是-1了,
所以1+(-2)的结果是-1 。

用补码计算确实简化了ALU的设计难度!!所以计算机用补码来表示负整数!!!!

欢迎关注微信公众账号Julia语言.jpg

你可能感兴趣的:(计算机中的补码是什么?)