计算机中的补码是什么?
简介
计算机中的符号数有三种表⽰⽅法,即原码、反码和补码。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤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的设计难度,所以计算机⽤补码来表⽰负整数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论