原码、反码、补码

来源:互联网 发布:数据库证书哪个好考 编辑:程序博客网 时间:2024/06/05 11:00

明确一点:

计算机内部存储的是补码,参与运算的也是补码。。。

如果没有特别声明为无符号的数(如逻辑数据或非数值数据(如ASCII码)),计算机内部一般存储的都是有符号数,但是对于计算机而言是无符号的,运算过程中不会考虑正负。

补码就是为了计算机运算过程中不用考虑正负(计算机而言,用无符号数模拟了有符号数的运算),节约电路设计成本等。

-------------------------------------------------------------------------------------------------------------------------------------------

1 原码

一个数字的二进制形式,有符号,正数最高位为0,负数为1,所以原码数值范围为-(2n-1-1) ~ 2n-1-1。

如+1原码00000001,-1原码10000001(8位为例,下同)

区分+0和-0,+0原码00000000,-0原码10000000

2 反码

二进制1取反是0,0取反是1

正数:原码=反码

负数:反码=原码的符号位不变,其余各位取反

如+1反码00000001,-1反码11111110

区分+0和-0,+0反码00000000,-0反码11111111

3 补码

正数:原码=反码=补码

负数:补码=原码的符号位不变,其余各位取反,再+1

如+1补码00000001,-1补码11111111([1000 0001]原->[1111 1110]反->[1111 1111]补)

不再区分+0和-0,0补码为00000000

-0的补码本来是10000000,现在用来表示-128,这样补码比原码和反码能多表示一位最低位,-2n-1~ 2n-1-1