源码,反码,补码

一、基本前提:

1、C语言中数据分为有符号数和无符号数,有符号数可以表示正数和负数,无符号数只能表示正数,其中有符号数的最高位为符号位,1表示负数,0表示正数,剩余的位表示数据位;无符号数的所有位都表示数据位。

2、数据在内存中都是以二进制存储,且都是以二进制补码的形式存储。

二、源码、反码、补码

1、源码:一个数最原始的二进制数

正数源码: 120 0111 1000
负数源码: -23 1001 0111
0的源码: 0 0000 0000
-0的源码: -0 1000 0000
1的源码: 1 0000 0001
-1的源码: 1 1000 0001
1+(-1) 1000 0010 = -2
若内存中用源码存储,会导致数据的运算结果不对,且0的状态有两种

2、反码:正数的反码= 原码,负数的反码 = 符号位不变,其他位取反

120
原码:0111 1000
反码:0111 1000
-23
原码:1001 0111
反码: 1110 1000
0,-0,1,-1的反码
0源码:0000 0000
0反码:0000 0000
-0源码:1000 0000
-0反码:1111 1111
1源码:0000 0001
1反码:0000 0001
-1源码:1000 0001
-1反码:1111 1110
1+(-1)=1111 1111(等于-0的反码)如果计算机中用反码存,负数运算结果正确,但是0的状态有2种

3、补码

正数的补码 = 反码=原码
负数的补码 = 反码 +1
0源码:0000 0000
0补码:0000 0000

-0源码:1000 0000
-0反码:1111 1111
-0补码:0000 0000(加1溢出后全置0)

1源码:0000 0001
1补码:0000 0001

-1源码:1000 0001
-1反码:1111 1110
-1补码:1111 1111
1+(-1)0000 0000 = 0,如果计算机中用补码存,运算结果正确,且0的状态只有1种,综上所述: 计算机中存的是一个数的补码

4、由源码求补码或由补码求源码

-123
原码: 1111 1011
反码: 1000 0100
补码: 1000 0101

补码求原码: (先求其反码,在求原码)

补码: 1000 0101
反码: 1111 1010(补码求反码,符号位不变,其他位取反)
原码: 1111 1011(反码求原码,反码+1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值