原码、反码与补码

1 原码

前提条件:用8位表示1个数。

下面列出的是1、2、3、-1、-2、-3的原码:

1:0000 0001

2:0000 0010

3:0000 0011

-1:1000 0001

-2:1000 0010

-3:1000 0011

2 反码

对于正数,反码与原码相同;

对于负数,反码等于原码取反,但符号位不变。

下面列出的是1、2、3、-1、-2、-3的反码:

1:0000 0001

2:0000 0010

3:0000 0011

-1:1111 1110

-2:1111 1101

-3:1111 1100

3 补码

对于正数,补码与原码相同;

对于负数,补码等于反码+1。

下面列出的是1、2、3、-1、-2、-3的反码:

1:0000 0001

2:0000 0010

3:0000 0011

-1:1111 1111

-2:1111 1110

-3:1111 1101

4 计算机存储方式

测试程序如下:

#include <stdio.h>

int main(void)
{
    int a = 1;
    int b = 2;
    int c = 3;
    int d = -1;
    int e = -2;
    int f = -3;
    printf("a = 0x%x,    %d\n",a,a);
    printf("b = 0x%x,    %d\n",b,b);
    printf("c = 0x%x,    %d\n",c,c);
    printf("d = 0x%x,    %d\n",d,d);
    printf("e = 0x%x,    %d\n",e,e);
    printf("f = 0x%x,    %d\n",f,f);
}

输出结果如下:

a = 0x1,        1
b = 0x2,        2
c = 0x3,        3
d = 0xffffffff, -1
e = 0xfffffffe, -2
f = 0xfffffffd, -3
Press any key to continue

根据输出结果可以知道,在计算机内,正负数都以补码的形式进行存储。

5 补码存储的原因

对于正数,原码与补码都一样,无所谓;

对于负数,若用原码进行计算,会出现错误。

例如(-1)+(-2)=(-3)

原码与补码的计算结果如下如图所示:

 

6 参考

负数在计算机中怎样存储

https://blog.csdn.net/littesss/article/details/70495810

posted on 2020-05-10 18:24  辉哥54110  阅读(865)  评论(0编辑  收藏  举报