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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NetworkManager详解

    NetworkManager详解直接继承自 MonoBehaviour, 还有就是被设计成了单例 singletonNetworkManager网络管理器是一个方便的HLAPI类,用于管理网络系统。       对于简单的网络应用NetworkManager网络管理器可以使用HLAPI控制。它提供了简单的方法来 启动和停止 客户端和服务器,以及管理场景,而且具有虚拟函数,用户代码可以使

    2022年10月5日
    0
  • MyBatis+Spring+SpringMVC框架面试题整理(一)

    MyBatis+Spring+SpringMVC框架面试题整理(一)目录■SpringMVC的工作原理■谈谈你对SpringMVC的理解■SpringMVC常用注解都有哪些?■Spring的常用注解■如何开启注解处理器和适配器?■​​​​​​​如何解决get和post乱码问题?■​​​​​​​谈谈你对Spring的理解■​​​​​​​Spring中的设计模式(解释)■​​​​​​​简…

    2022年5月2日
    41
  • qt plaintextedit使用_qt获取lineedit的内容

    qt plaintextedit使用_qt获取lineedit的内容QLineEdit和QTextEdit都是文本框类,QLineEdit类是单行文本框控件,可以输入单行字符串。QTextEdit类是多行文本框控件,可以显示多行文本内容。

    2022年10月6日
    0
  • 测试用例八大要素有哪些?

    测试用例八大要素有哪些?测试用例八大要素:用例编号、操作步骤、测试标题、重要级别、前置条件、测试输入、所属模块、预期结果。用例编号由字符串组成,具有易于识别性和唯一性;操作步骤需要标明详细的测试步骤;测试标题需要简洁、明了;重要级别一般分为高、中、低;前置条件就是进行测试用例的前提条件;测试输入包括用户名、密码、订单号等内容;所属模块标明被测试的模块或者单元;预期结果表示预期输出的结果。测试用例很重要,是设计和测试过程的基础,同时测试用例也是软件测试的核心,可以发现软件可能出现的bug,一般每个软件产品都有与之对应的测试用

    2022年6月28日
    97
  • 几种常见的内存溢出与解决办法

    几种常见的内存溢出与解决办法解決辦法:

    2022年7月1日
    19
  • 罗技g502鼠标驱动_LOL用罗技g102与g502

    罗技g502鼠标驱动_LOL用罗技g102与g502前言不会罗技游戏鼠标设置同学看过来,在下刚学会的依葫芦画瓢,首先打开罗技ghub驱动:欢迎来到罗技首页这里可以添加游戏配置文件也可以忽略就是删除对应的配置文件设置方法:在鼠标设置中–分配–系统中把“G切换”拖到想要的按键上。使用方法:长按设置好的“G切换”键再按鼠标上的其他键触发G切换模式中的指令如图。1、快捷键的分配包括的功能有多媒体上一曲下一曲一件启动应用这里可以进行快捷键的设置和禁用6个按键都可以设置2、宏的创建多功能按键设置一键释放技能等操作

    2022年10月9日
    0

发表回复

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

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