补码、二进制的减法

补码、二进制的减法有关二进制的负数及减法运算二进制数表示方法:原码反码补码二进制减法运算法则:**二进制数表示方法:**无符号二进制数(正数)(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)
上一篇 2022年6月18日 下午3:36
下一篇 2022年6月18日 下午3:36


相关推荐

  • VLAN和TRUNK口配置

    VLAN和TRUNK口配置trunk 口和 VLAN

    2026年3月17日
    2
  • 字符串中最长的回文字符串长度

    字符串中最长的回文字符串长度1、回文字符串  回文字符串是指aba类型的字符串,即字符串关于中间字符对称。判断字符串中是否含有回文、得到最长回文字符串的长度、得到不同回文字符串的个数等等,是经常考察的编程题目。2、之前采用的一种比较笨的得到最长回文字符串的方法  思想:双重指针遍历,根据回文字符串的特点,回文开始的字符与结尾处字符相同……那么一个指针i从前向后遍历,一个指针j从后向前遍历,如果出现

    2022年6月4日
    35
  • 前端单元测试总结_javascript单元测试

    前端单元测试总结_javascript单元测试1.为什么需要单元测试正确性:测试可以验证代码的正确性,在上线前做到心里有底自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到

    2022年8月2日
    11
  • 图的连通性问题专题整理

    图的连通性问题专题整理

    2021年12月8日
    54
  • C语言中的结构体指针

    C语言中的结构体指针C 语言中的结构体指针结构体指针概念结构体变量成员访问结构体指针作为函数参数结构体数组指针结构体的自引用与不完全声明结构体指针的概念概念 结构体变量的地址 指向某个结构体变量 同时也是结构体变量中第一个元素的地址 我们可以通过结构体变量可以指向结构体中包含的一些成员定义 struct 结构体名 结构体指针变量名 如 structaddres addr 结构体

    2026年3月16日
    2
  • AT24C02 E2PROM芯片详解

    AT24C02 E2PROM芯片详解24C02 是一个 2KBit 的串行 EEPROM 存储器 掉电不丢失 内部含有 256 个字节 在 24C02 里面有一个 8 字节的页写缓冲器 A0 A1 A2 硬件地址引脚 WP 写保护引脚 接高电平只读 接地允许读和写 SCL 和 SDA IIC 总线可以看出对于不同大小的 24Cxx 具有不同的从器件地址 由于 24C02 为 2k 容量 也就是说只需要参考图中第一行的内容 芯片的寻址 AT24C 设备地址

    2026年3月18日
    2

发表回复

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

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