原码 反码 补码

一般意义上的二进制:

二进制表示:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
对应的数字:0  1  2  3   4  5  6  7   8  9  10  11  12  13  14  15


注:这是通常生活中所理解的二进制,但只能表示自然数,实际上这也就是无符号数的原码。

原码:

计算机中对数字的二进制表示。最高位为符号位,0表示正数,1表示负数。

二进制表示:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
对应的数字:0  1  2  3   4  5  6  7   0   -1   -2  -3   -4   -5  -6  -7

注:原码可以表示任何整数,但存在两个问题。
1.正负数相加不为0,如1和-1的原码相加 0001+1001 = 1010,对应原码为-2。
2.存在两个0,即0000和1000。

为解决正负数相加不为0的问题,我们采用反码的表示方法。

反码:

正数表示与原码相同,负数是除去符号位各位取反。

二进制表示:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
对应的数字:0  1  2  3   4  5   6  7  -7  -6  -5  -4  -3  -2  -1  -0

注:反码解决了原码中正负号相加的问题。如1和-1的反码相加,0001 + 1110 = 1111 = -0 =0。
但是存在两个0的问题依旧没有解决,所以我们需要用到补码。

补码:

正数表示与原码相同,负数是除去符号位各位取反,并且加1。

二进制表示:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
对应的数字:0  1  2  3   4  5   6   7  -8  -7  -6  -5  -4  -3  -2  -1

注:至此,利用补码解决了原码的连个缺陷,补码可以表示所有整数并进行正确运算。

(以上内容参考《C语言点滴》赵岩)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值