补码、二进制的减法

补码、二进制的减法有关二进制的负数及减法运算二进制数表示方法:原码反码补码二进制减法运算法则:**二进制数表示方法:**无符号二进制数(正数)(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。

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

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

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


相关推荐

  • 出版了两本实体书,写了9本开源电子书,还上了百度百科,冰河这是要起飞了吗?(建议收藏)

    出版了两本实体书,写了9本开源电子书,还上了百度百科,冰河这是要起飞了吗?(建议收藏)我在CSDN的这两年:出版了两本实体书,各自加印1万册,写了9本开源电子书,还上了百度百科!!

    2022年5月31日
    28
  • C#正则表达式大全

    C#正则表达式大全这是我发了不少时间整理的C#的正则表达式,新手朋友注意一定要手册一下哦,这样可以节省很多写代码的时间。下面进行了简单总结。只能输入数字:"^[0-9]*$"。只能输入n位的数字

    2022年7月4日
    18
  • samba文件共享服务配置过程_linuxsmb文件共享

    samba文件共享服务配置过程_linuxsmb文件共享samba文件共享服务

    2022年4月21日
    58
  • matlab插值实验目的,matlab插值实验报告数学实验.doc

    matlab插值实验目的,matlab插值实验报告数学实验.docmatlab插值实验报告数学实验.doc新乡学院数学与信息科学系实验报告实验项目名称插值实验所属课程名称数学实验实验类型综合性实验实验日期班级学号姓名成绩一、实验概述【实验目的】掌握用MATLAB插值的方法,了解拉格朗日插值、线性插值、样条插值的基本思想,了解三种网格节点数据的插值方法的基本思想,了解掌握用MATLAB计算一维差值和二维插值的方法。【实验原理】拉格朗日LAGRANGE插值。已知函…

    2022年5月26日
    36
  • 控制台禁用js_禁止直接访问js

    控制台禁用js_禁止直接访问js主要为了通过禁止打开控制台,防止别人进行代码调试。1、禁止右键查看源码和F12//禁止F12键盘事件document.addEventListener('keydown',function(event){   return123!=event.keyCode||(event.returnValue=false)});//禁止右键、选择、复制document.addEventListener(‘'contextmen

    2022年9月25日
    0
  • TinyXML介绍「建议收藏」

    TinyXML介绍「建议收藏」http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Wind

    2022年5月3日
    47

发表回复

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

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