学计算机,还不知道数据编码?你OUT了

Even if the road is bumpy, the wheels have to move forward; even the rivers roaring waves, ships are sailing.即使道路坎坷不平,车轮也要前进;即使江河波涛汹涌,船只也航行。

我们前面说过进制转换的问题,也知道计算机中许多数据都是用二进制来存储的,那数据传输过程中是否也全是由二进制传输呢,在二进制传输中还会有很多的问题,比如是否可能会被黑客劫持,网络安全毕竟也是计算机中关键的一环。

想必大家也看过抗日神剧,知道在以前部队联络是靠发报机来发送消息的,发报机发出来的信息对方都会用一个特殊的码来解密。在计算机中也有关于的各自码的概念,比如原码,补码等等。说到原码,在网络安全中,是可以解密的,对原码的解密,不过这涉及到网络安全的知识,这里就不细说了。

那么为啥会有编码呢?据说是为了解决负数如何表示的问题,但小编觉得应该不只是为了解决这一个问题。比如用1和0也可以来表示正负数,确实也有这种表示方法,叫原码,也叫符号绝对值表示法。

那么用0和1来表示可行不?单单从存储和表示的角度来讲好像也行,问题不大,关键有个数值不知大家忽略没有,那就是0,给0加正负不都是一样么。莫非再出一种解决方案?有想法的以后可以自行去研究,就现在的解决方案来讲,并没有再多出一种解决方案。因为用0和1来表示正负在进行加减乘除的时候会很麻烦,如果还要加一种方案来解决0的问题,估计就很折腾了。

那么问题是如何被解决的呢?这就要说到补码,补码解决了此问题,而且还有很多优点。如:
0的表示唯一
符号位可作为数值直接参与运算(编码主要解决的就是负整数的问题)

那么补码到底又是什么呢?
维基百科:
补码是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。补码以有符号比特的二进制数定义。

正数和0的补码就是该数字本身。负数的补码则是将其对应正数按位取反再加1。

补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。

那补码该如何计算呢,这里我们还需要借助一个反码,反码是作为一种中间码存在的,毕竟补码不是直接从原码解过来的。

那么反码又是什么呢?可能大家看到这么多码都会有点头晕,这其实问题不大,一天看不懂,那就多看几天呗。毕竟小编也不是一会儿就看懂的。反码其实就是在原码的基础上保持负数的符号位,也就是最高位1不变,其它位反过来,也就是0变1,1变0,这样就得到了负整数的反码。正整数它的补码就是原码,反码也是原码,都一样。

反码作用不大,就只是作为中间码来求补码,那再得到反码后怎么来求补码呢,其实也快了,只需在反码的最低位加1.

还有一个口诀叫补码怎么求,原码求反再加一。(也有关于数据溢出的问题,这里不细讲)

例如:X=-1100110 [X]原 =1 1100110 [X]反 =1 0011001

在求到补码后又该如何求回补码呢,也很简单,只需再次求反加一即可。

关于各种码的问题暂时讲到这里啦,以后深入后再为大家细细道来。

你可能感兴趣的:(公众号日常)