欢迎光临散文网 会员登陆 & 注册

C语言 | 关于数据在计算机的存储形式(二)

2022-09-26 11:43 作者:信盈达  | 我要投稿

接上篇:C语言 | 关于数据在计算机的存储形式

插播一条信息📢📢

直播时间:每天下午15:00到17:00,晚上19:00到21:00开启知识直播专场!!!

直播地址:B站主页直播间,某音搜索“信盈达”账号(有两个号,分享不一样的知识直播);

还是赶紧行动起来吧!!!    


(第二个问题)

这就是我们遇到的第二个问题,为了计算结果和我们认知一致,我们需要通过补码的方式将数据进行存储。

这边先给大家解释一下什么是原码、反码和补码,然后再和大家解释为何我们需要补码才能进行正确的运算。

对于一个正数而言它的原码、反码、补码都是一样的。

对于一个负数,它的原码是最高位置一,表示负数,然后再按照数据的大小转化为二进制形式。

例如:-1 = 1000 0001

反码是除了最高位之外,其他的所有位进行取反操作,即:-1的反码1111 1110。

补码是将得到的反码进行+1操作,即:-1的反码1111 1111。

我们再利用两个数的补码进行运算:1+(-1)

0000 0001 + 1111 1111 = 1 0000 0000

最高位的1溢出,即得到正确的0的结果。

由此可以看出,计算机只有通过反码进行存储并运算,才能得到正确的运算结果。

 

(第三个问题)

那么现在来解释第三个问题,我们为何需要补码才能计算出正确的结果?

首先我们要清楚,计算机和常规世界的的计算是有差异的。因为在计算机中存在溢出这一现象。例如对于一个八字长的数据,我们先不考虑它有符号的情况,最大的数就是:

1111 1111 = 255

255+1 = 256那是常规运算的结果。但是如果计算机1 0000 0000最高位的1就溢出了,所以255+1=0。相信学习计算机的都会明白这个道理。

再用钟表进行举例,相信大家会更加清楚。因为表盘也是一样存在溢出的,例如11:59分再加一分钟就是0:0啦。所以对于时钟而言,我们从0点到达四点钟,可以顺时针走四个小时,也可以逆时针走八个小时,即对于表盘0+4=0+(-8)。

这就是计算机和数学的区别了。

再来回到我们的1+(-1),即:0000 0001+1111 1111,如果不考虑符号的话,就是1+255,即对于八个字长的数据来说1+(-1)和1+255是一样的。

以上我们可以看到这样就是利用了补数和溢出的原理,解决了计算机中的负数运算的问题。

最后,回到我们开头的问题就简单啦。

0:0000 0000

按位取反之后:

~0:1111 1111

在计算中1111 1111是补码

反码是是补码减一,则反码是1111 1110

再转换成原码:1000 0001即-1。


C语言 | 关于数据在计算机的存储形式(二)的评论 (共 条)

分享到微博请遵守国家法律