C语言中 真值/原码/补码/反码 的概念

这里我们以十进制数+12和-12为例,解释C语言中的 真值、原码、补码、反码 概念。先来一点补充前提:

- C语言中,数字有 int、float、double类型,占内存分别为2、4、8个字节。这里我们讨论的是2个字节16位的情况

- 12就是+12,只是一般表示正数的时候我们省略+号

- 十进制数12,转为二进制为1100

- 数位值原码=反码=补码

- 计算机中所有整数类型都是以补码形式储存的,原码和反码是为了方便解释补码而引入的两个概念。


一、真值

顾名思义,对于这个案例而言,真值就是+12和-12.

二、原码

把12的二进制表示(1100)如下放在这16个格子里:

 注意第一位是符号位,正数用0表示。

而对于-12,符号位是1:

三、反码

如果是正数,反码就跟原码一样:

  • 12的原码:
  • 12的反码:

如果是负数,在原码基础上,数位值取反(即除了符号位,所有0变成1,1变成0):

  • -12的原码:
  •  -12的反码:

 四、补码

正数在反码的基础上不变(也就是,正整数的原码、反码、补码是相同的)。

  • 12的原码、反码、补码:

负数要在反码的基础上+1(注意二进制表示满2要进位):

  • -12的原码、反码、补码:

PS:为什么要做这些变换?——为了对正、负数都能进行正常的运算。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值