补码的详细解析(数据的存储与输出以及部分数据类型详解)

本篇文章分享了本人对该知识点的认识,内容如果有误,还请各路大佬多多指点。

一、数据的存储

数据的存储需要经历以下几个步骤:

1.对应的数据

2.原码

3.补码

但是在了解该内容之前我们需要补充几个知识点:

1字节=8比特位

一个比特位相当于一个二进制的单位

如:0000 0001就是8个比特位

在我们定义数据的类型时,会向电脑申请一块空间来存储该数据

如int类型:

int a = 3;

int会向电脑申请4个字节的空间来存放3这个数据,每个不同的数据类型申请的空间都是不同的。

以下给出各个数据类型所申请的空间,需要的可以自取:

接下来我们正式开始讲解存储。

举一个例子,如

char a = 1;

我们要把3存储到电脑中就需要把3从十进制转化为二进制

3的二进制为11,

但是我们在char向电脑中申请了1个字节的空间(char申请空间的大小请查看上表)。

并且原码就是将3转化为二进制的形式

所以3的原码为:

0000 0011

接下来进入正题 

对于补码我们只需要知道,

正数的补码也就是正数自身的原码。

也就是说3的补码就是

0000 0011

 而负数的补码则需要将负数的原码转化为反码再加1。

举个例子:

char a = -3;

所以-3的原码是什么呢?

在这里我们需要再补充一个知识点:

第一个(从左往右)比特位通常不用来存储数据

(也可以让它存储数据,但是在这里就不再扩展了),

当第一位为0时,则该数为正数,

第一位为1时,则为负数。

比如3的原码为

0000 0011

 所以-3的原码为

1000 0011

 反码也就是将1变成0,0变成1(符号位不变,也就是第一位不变),

所以-3原码的反码为

1111 1100

这个时候再对其进行加1

-3的补码也就是

1111 1101 

反码的加1也就像普通的加减一样,不过这里是二进制的加1。

所以遵循二进制的规则——满二进一

0000 0001 

 加1后因为满2了,所以需要向前进一位为:

0000 0010

 数据是以补码的形式储存在电脑中 

以上内容就是关于数据的存储,如果看不懂的话可以多看几次

接下来讲解数据是如何输出的。

二、数据的输出

数据的输出需要经历以下几个步骤

1.补码

2.原码

3.转化为对应的数据

以下涉及的知识点前面已经有提到过了,此处便不再补充。

我们依旧再举个例子

正数的输出

如:

3的补码为

0000 0011

将其转化为原码为

0000 0011 

 再将原码从二进制转化为十进制的3进行输出。

这是关于正数的输出,

而关于负数的输出,

如-3的原码为:

1111 1101

将其转化为反码为:(此处减1,与负数的反码转化为补码的加1相反

 1111 1100

再将反码转化为原码:

1000 0011 

 在输出数据时,电脑会对该原码的第一个比特位(从左往右)进行检测,

如果为1则会在输出的数据前加-(负号),

如果为0时则直接输出该数据。

所以接下来在将该原码从二进制转化为十进制进行输出。

以上就是负数的输出。

到这里我们可以与前文串联,形成一个完整的存储与输出的过程,让自己的思路变的清晰些。

本篇文章到这里就结束了,如果对你有帮助,可以支持一下我。

内容如果有错误还请大佬更正。

在此希望各位可以成为C语言的大佬!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值