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

C语言中 真值原码补码反码 的概念,第1张

这里我们以十进制数+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:为什么要做这些变换?——为了对正、负数都能进行正常的运算。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2991134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存