便于计算机处理的补数详解

简介: 便于计算机处理的补数详解

  右移空出来的高位数值,有0和1两种形式。要想区分什么时候补0什么时候补1,首先就行需要掌握二进制数表示负数的方法


       二进制数中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位当作符号位。符号位是0表示正数,是1表示负数。那么-1用二进制数如何表示呢?可能很多人会这么认为:因为1的二进制数是 0000 0001,最高位是符号位,所以正确的表示-1应该是1000 0001,但是这个答案真的对吗?


计算机世界中时没有减法的,计算机在做减法的时候,其实就是在做加法,也就是用加法来实现的减法运算。比如100 - 50,其实计算机来看的时候应该是 100 + (-50),为此,在表示负数的时候就要用到二进制补数,补数就是用正数来表示的负数


为了获得 补数,我们需要将二进制的各位数的数据全部取反,然后再将结果 +1即可,先记住这个结论,下图为演示:


-1 取反过程:



具体来说,就是先获取某个数值的二进制数,然后对二进制数的每一位做取反操作(0 ---> 1 ,1 ---> 0),最后再对取反后的数+1,这样就完成了补数的获取


补数的获取,虽然直观上不易理解,但是逻辑上却非常严谨,比如我们来看一下 1 -1的这个过程,我们先用上面的这个 1000 0001 (它是1的补数,用来做计算)来表示一下


1 - 1错误分析图:



1 - 1会变成130,而不是0,所以可以得出结论,1000 0001 表示-1是完全错误的


然后用补数 1111 1111,来论证一下正确性


1 - 1 错误分析图:



我们可以看出 1 - 1实际上就是1 + (-1),对-1进行上面的取反 +1后变为1111 111,然后与1进行加法运算,得到的结果是九位的1 0000 0000,结果发生了溢出,计算机会直接忽略掉溢出位,也就是直接抛掉 最高位1,变成 0000 0000,也就是0,结果正确,所以1111 1111表示的就是-1


所以负数的二进制表示就是先求其补数,补数的求解过程就是对原始数值的二级制各位取反,然后将其结果 +1


当然,结果不为0的运算通过也可以通过补数求得正确结果


不过,有一需要注意,当运算结果为负的时候,计算结果的值也是以补数的形式出现的,比如3 -5这个运算,来看一下解析过程:


3 - 5 的解析过程:



3 - 5的运算,我们按着上面的思路过一遍,计算出来的结果是1111 1110,我们知道,这个数值肯定表示负数,但是负数无法直接用十进制表示,需要对其取反+1,算出来的结果就是2,因为1111 1110的高位是1,所以最终的结果是-2


编程语言的数据类型中,有的可以处理负数,有的不可以,比如C语言中不能处理负数的unsigned short类型,也有能处理负数的short类型,都是两个字节的变量,它们都有2的十六次幂数值,但是取值范围不一样,short类的取值范围是-32768 ~ 32767,unsigned short的取值范围是0 - 65536


仔细思考一下补数的机制,就能明白-32768比32767多一个数的原因,最高位是0的整数有0-32767共32768个,其中包括0。最高位是1的负数,有-1 - -32768共32768个,其中不包含0。0虽然既不是正数也不是负数,但是考虑到其符号位,就将其归为正数


目录
相关文章
|
6月前
|
人工智能 安全 大数据
计算机在矿产领域的应用
计算机在矿产领域的应用
|
6月前
|
人工智能 安全 数据挖掘
计算机在石油化工领域的应用
计算机在石油化工领域的应用
|
6月前
|
监控 安全
计算机在核能领域的应用
计算机在核能领域的应用
|
6月前
|
存储 编解码
计算机基本组成
【1月更文挑战第5天】计算机基本组成。
105 1
|
1月前
|
存储 C语言
1.4 计算机能做什么
在学习C语言编程前,了解计算机工作原理至关重要。计算机由CPU、RAM及永久存储设备等构成,CPU从内存获取并执行指令,其工作区由寄存器组成,用于存储指令及其地址,从而高效地进行运算任务。这有助于理解C程序编写与运行的关系。
39 7
|
6月前
|
存储 设计模式 缓存
计算机是怎么构成的
计算机是怎么构成的
47 2
|
4月前
|
物联网 人机交互 语音技术
计算机中输入输出设备
【7月更文挑战第28天】
90 1
|
5月前
|
网络协议 安全 数据安全/隐私保护
计算机与通信工程的联系
计算机与通信工程的联系
42 0
|
存储 前端开发 安全
2019.11.10计算机的拆装机总结
2019.11.10计算机的拆装机总结
106 0
|
6月前
|
人工智能 监控 算法
计算机在公共卫生领域的应用
计算机在公共卫生领域的应用