补码、二进制的减法

补码、二进制的减法有关二进制的负数及减法运算二进制数表示方法:原码反码补码二进制减法运算法则:**二进制数表示方法:**无符号二进制数(正数)(8位)(能够表示的十进制数范围0-255)举例:10(8’b0000_1010)100(8’b0110_0100)255(8’b1111_1111)有符号二进制数(正数负数)(8位)(能够表示的十进制数范围-128~127)举例…

大家好,又见面了,我是你们的朋友全栈君。

**

二进制数表示方法:

**
无符号二进制数(正数)(8位)(能够表示的十进制数范围 0-255 )
举例: 10(8’b0000_1010) 100(8’b0110_0100) 255(8’b1111_1111)

有符号二进制数(正数 负数)(8位)(能够表示的十进制数范围 -128 ~ 127)
举例: 10(8’b0000_1010) 100(8’b0110_0100) 255(8’b1111_1111)
举例:-10(8‘b1000_1010) -100(8’b1110_0100) -127(8’b1111_1111)

**

原码反码补码

**
计算机存储和运算过程中一般会用到原码,反码和补码
下面以8位二进制机器码举例说明:
原码:最高位代表符号位,其余位为数值的绝对值
如:+8 (8’b0000_1000) -8(8’b1000_1000)
反码:存储时正数的反码与原码相同,负数的反码符号位保持不变,其余位数按位取反
如:+8 (8’b0000_1000) -8(8’b1111_1000)
补码:存储时正数的补码与原码相同,负数的补码在反码的最低位+1得到
如:+8 (8’b0000_1000) -8(8’b1111_1001)

举例:分别写出+3和-3的原码,反码和补码
在这里插入图片描述
**

二进制减法运算法则:

**
在做减法之前,我们首先来看一下,如果没有定义位宽(二进制的位数),那么我们要在参与运算的数值及结果中取一个最大的绝对值,找到能够表示此绝对值的二进制数位宽并+1.
例如:
100+50 = 150 当我们计算100+50时, 定义为宽最小为8位(无符号)或9位(有符号)或更大也可
100-50 = 50 定义为宽最小8位 (有符号)或更大也可
50-100 = -50 定义为宽最小为8位(有符号)或更大也可
-50-100 = -150 定义为宽最小为9位(有符号)或更大也可

接下来我们来看减法运算
例1: 100-50
由于7位2进制最大表示128,则要表示100最少需要7位,但由于涉及减法运算,所以加一位符号位用8位表示。

100的8位二进制为 8‘b0,110_0100; (红色表示符号位)
-50的8位二进制为 8‘b1,011_0010; 反码(为了计算补码)为8‘b1,100_1101 补码:8‘b1,100_1110
实际运算过程为两个二进制补码相加;(可以理解为100+(-50))
在这里插入图片描述
由于是8位计算,最后的进位舍去,得到二进制8‘b0,011_0010 = 50(D)

例2: -100-50
由于运算结果为-150 绝对值150最大,7位2进制数最大只能表示128,因此需要8位表示150,又因为是有符号运算,因此至少要用9位去表示-150。

-100的8位二进制为 9‘b1,0110_0100; 反码为9‘b1,1001_1011 补码:9‘b1,1001_1100
-50的8位二进制为 9‘b1,0011_0010; 反码为9‘b1,1100_1101 补码:9‘b1,1100_1110
实际运算过程为两个二进制补码相加;(可以理解为(-100)+(-50))
在这里插入图片描述
此时我们得到一个负数9‘b1,0110_1010,但是不要忘记,负数的存储是以补码形式存储的,我们需要把它转化为原码,因为我们太熟悉原码了。

求原码的过程和求反码正好相反,首先减一,得到反码,对反码再求反码,得到原码:
负数9‘b1,0110_1010的反码是9‘b1,0110_1001,原码是9‘b1,1001_0110。

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150281.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • kettle 教程(四):自定义 Java 代码

    kettle 教程(四):自定义 Java 代码kettle拥有很多自带的组件,能帮我们实现很多的功能。但是我们总有一些很复(qi)杂(pa)的需求,用自带的组件实现不了,或者说实现起来很复杂。那么这时我们就要用到万能的组件了(Java代码),通过自己写代码来实现任何想要的功能。自定义Java代码假设有这样一个需…

  • Linux 学习之 MQTT 服务器搭建「建议收藏」

    Linux 学习之 MQTT 服务器搭建「建议收藏」摘要:前言博主之前写了一篇《在Windows下搭建MQTT服务器》,这次要尝试在Ubuntu下搭建MQTT服务器。实际上,下载好源码包后,后面的都和那篇文章差不多了。开发环境虚拟机Ubuntu14.04.5LTSApache-Apollo-1.7.1准备工作由于搭建Apollo环境变量需要有JAVA_HOME,这个时候需要安装JDK,可以参考这篇文章:《Ubuntu安装JDK1.8.0并配置环境变…

  • 网络传真和传真服务器[通俗易懂]

    网络传真和传真服务器[通俗易懂]传真机自1906年在德国推出以来,到今天已走过一百多年的历史,传真的形式也从最早的机械传真、光电传真、数字传真发展到今天的电子传真、电脑传真、网络传真、无纸传真、传真系统、传真服务器、传真软件、传真卡等。   所谓电子传真机(包括各种类型的网络传真机、电脑传真机、数码传真机、无纸传真机、传真软件、传真系统、传真服务器等,下同),就是通过电脑收发传真。     在发送传真前,自动检

  • Ubuntu安装主题_ubuntu系统安装教程

    Ubuntu安装主题_ubuntu系统安装教程这几款漂亮的主题在网上流传很久了,它们都出自Zgegblog作者,感谢他为我们带来这么棒的主题,而且安装非常方便,一共是九套主题,下面就是在ubuntu9.10中的安装方法:首先需要编辑/etc/apt/sources.list文件,在终端中输入:gksudogedit/etc/apt/sources.list在其中加入以下源:debhttp://p

  • 使用等价类划分法设计测试用例_等价类划分法和边界值分析法

    使用等价类划分法设计测试用例_等价类划分法和边界值分析法by青竹居士  等价列划分设计方法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少量具有代表性的数据作为测试用例。等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。并合理地假定:测试某等价类的代表值就等于对这一类其他值的测试。等价类划分有两种不同的情况:有效等价类和无效等价类。设计时要同时考虑这两种等价类

  • java程序一定会加载的包是哪个?

    java程序一定会加载的包是哪个?

发表回复

您的电子邮箱地址不会被公开。

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