二进制——减法「建议收藏」

二进制——减法「建议收藏」二进制的减法分为两种:1.使用硬件减法器运算;2.将减法转换成加法运算。 本文讲述第二种方法。 大家都知道计算机有两种数值类型:1.有符号类型;2.无符号类型。 有符号类型是利用其二进制的最高位来存储正负标志的,所以有符号类型的最大值的绝对值要小于无符号类型,就是因为有符号类型比无符号类型少了一位数据位,大小当然就少一半了,但是两种类型所表示的数值的个数是一


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

二进制的减法分为两种:

1.使用硬件减法器运算;

2.将减法转换成加法运算。

 

本文讲述第二种方法。

 

大家都知道计算机有两种数值类型:

1.有符号类型;

2.无符号类型。

 

有符号类型是利用其二进制的最高位来存储正负标志的,所以有符号类型的最大值的绝对值要小于无符号类型,就是因为有符号类型比无符号类型少了一位数据位,大小当然就少一半了,但是两种类型所表示的数值的个数是一样多的,因为从二进制角度来看,两种类型没有任何的区别。

 

在这里我们主要使用的就是有符号类型,而无符号类型实际上是可以通过扩展一位符号位来转为有符号类型的。

 

我们知道数学里的减法等价于加上一个相反数,计算机也是利用了这一特性来进行减法运算的。

这里要提到两个概念:原码、反码。

原码即数值的原始二进制编码。

反码即除标志位外的所有位进行按位取反运算所得到的二进制编码,如原码为10001000的数的反码为11110111。

 

注:反码和补码只针对于负数,正数的反码和补码等于原码,即正数的原码、反码和补码一样。

 

下面我们来看看计算机是怎样进行减法运算的:

 

00000001(1)- 00000001(1)= 00000001 + 10000001

 

取所有数值的反码:

 

00000001(正数的反码不变)+ 11111110(负数的反码)

 

进行二进制的加法运算:

 

= 11111111 (结果也为反码)

 

由于结果也为反码,而且为负数,所以要取得真正的结果还要进行反向运算,反码的反向运算和正向运算算法一样:

 

10000000 = -0

 

现在问题出现了,怎么会是-0呢,所以,又提出了补码的概念。

补码即反码+1,是为了解决标志位问题而提出的,它使标志位也参加到了运算中去。

 

下面我们再用补码重新做一遍:

 

00000001(正数的补码不变)+ 11111111(负数的补码) = 00000000(最高位进位超出范围,被丢弃)= 0

 

注:正数结果的补码等于原码,所以不需要反向运算了。

 

结果正确了,下面我们做几个练习吧:

 

11 – 4 = 7

 

00001011 – 00000100 = 00001011 + 10000100 = 00001011 + 11111100 = 00000111 = 7 

 

正确。

 

4 – 11 = -7

 

00000100 – 00001011 = 00000100 + 10001011 = 00000100 + 11110101 = 11111001 = 10000111 = -7

 

正确。

 

好,二进制的减法就讲到这里了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193740.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • aspectjweaver AspectJ

    aspectjweaver AspectJ基于aop的依赖jar包,可以实现切面过滤拦截。依赖包:<!–https://mvnrepository.com/artifact/org.aspectj/aspectjweaver–><dependency><groupId>org.aspectj</groupId><artifactId>asp…

    2022年7月12日
  • Android短信验证码自动填写功能的实现

    Android短信验证码自动填写功能的实现android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦,因此有必要能够自动获得下发的短信验证码,方便了用户的操作,用户体验更好。

    2022年7月25日
  • Java虚拟机简介

    Java虚拟机简介JVM概念● JVM是JavaVirtualMachine(Java虚拟机)的缩写,是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码)

    2022年7月8日
  • gridview分页样式[通俗易懂]

    gridview分页样式[通俗易懂] gridview分页样式在ASP.NET 2.0种提供了GridView控件。该控件的分页比较方便,可以通过在Visual Studio .NET 2005种简单设置即可实现各种分页功能。1. 默认分页方式(1) 是否允许分页GridView的AllowPaging属性。(2) 每页记录数GridView的PageSize(3) 分页导航条形式GridView的Pager

    2022年7月17日
  • linux 查看1521端口状态,linux防火墙开放1521端口

    linux 查看1521端口状态,linux防火墙开放1521端口问题描述:使用plsql连接数据库发现TNS报错,登录服务器发现防火墙开放,如果直接关闭防火墙,所有的端口都可以连接,但是实际中可能会遇到开启防火墙的库,这时候需要开放单一端口对某一服务器或者某一网段1.开放1521端口对所有服务器vi/etc/sysconfig/iptables-AINPUT-mstate–stateNEW-mtcp-ptcp–dport1521-…

    2022年6月10日
  • 使用VMware安装centos7并配置网络

    使用VMware安装centos7并配置网络准备工作:1.VM虚拟机(本文使用VMware14.1.2)2.Centos7安装包(https://www.centos.org/download/)centos官网提供多个版本下载,一般使用标准的DVD版安装版,大约4.2G。也可以使用mini版,后续自己安装第三方软件。各版本区别:https://wiki.centos.org/Manuals/ReleaseNotes/Cent…

    2022年6月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号