嵌入式硬件篇---原码、补码、反码


文章目录


前言

以上就是今天要讲的内容,本文仅仅简单介绍了八进制、十六进制的原码、反码、补码。


简介

在计算机中,源码、补码和反码 是表示有符号整数 的三种方式,主要用于处理负数。下面详细介绍它们的概念和转换方法,并通过示例说明。

八进制原码、反码、补码

1. 原码

源码是最直观的表示方法 ,直接用最高位表示符号 (0 表示正数,1 表示负数),其余位表示数值的绝对值

规则

正数:符号位为 0 ,数值部分为二进制绝对值

负数:符号位为 1 ,数值部分为二进制绝对值

示例

8 位二进制为例:

+5 的源码:00000101

-5 的源码:10000101

问题

  1. 源码的缺点是 0 有两种表示形式:00000000(+0)和 10000000(-0)。
  2. 加减法运算不方便,需要额外处理符号位。

2. 反码

反码是为了解决源码加减法 的问题而提出的。正数的反码与源码相同负数的反码是对源码的数值部分逐位取反(符号位不变)

规则

正数:与源码相同。

负数:符号位为 1,数值部分逐位取反。

示例

+5 的反码:00000101(与源码相同)

-5 的反码:11111010(符号位不变,数值部分取反)

问题

  1. 反码仍然存在 +0 和 -0 的问题。
  2. 加减法运算时,最高位的进位需要循环加到最低位(称为"循环进位"),增加了复杂性。

3. 补码

补码是目前计算机中最常用的表示方法 ,解决了反码的问题。正数的补码与源码相同,负数的补码是对反码加 1。

规则

正数:与源码相同。

负数:符号位为 1,数值部分逐位取反后加 1。

示例

+5 的补码:00000101(与源码相同)

-5 的补码:

源码:10000101

反码:11111010

补码:11111011(反码加 1)

优点

  1. 0 只有一种表示形式:00000000。
  2. 加减法运算可以直接进行,无需额外处理符号位。
  3. 补码表示的范围比源码和反码更大。

4. 补码的运算

补码的最大优势是加减法可以直接用二进制运算完成。

示例:计算 5 + (-3)

5 的补码:00000101

-3 的补码:

源码:10000011

反码:11111100

补码:11111101

相加:

00000101 (5)

+11111101 (-3)


100000010

由于是 8 位二进制,最高位的进位被丢弃,结果为 00000010,即 2。

5. 总结

源码:直观,但加减法复杂

反码:解决了部分问题 ,但仍存在 +0 和 -0 的问题

补码:解决了所有问题 ,是现代计算机的标准表示方法。

通过补码,计算机可以高效地进行有符号整数的加减法运算,同时避免了符号处理的复杂性。

十六进制原码、反码、补码

1. 十六进制的基本概念

十六进制(Hexadecimal)使用 16 个符号表示数值:0-9 和 A-F(A=10, B=11, ..., F=15)。

每个十六进制位对应 4 个二进制位。

例如,0x1A 表示二进制的 00011010。

2. 十六进制的原码

原码是数值的直接表示,最高位表示符号(0 为正,1 为负),其余位表示数值的绝对值。

规则

正数:符号位为 0,数值部分为十六进制绝对值。

负数:符号位为 1,数值部分为十六进制绝对值。

示例

假设使用 8 位十六进制数(32 位二进制),最高位为符号位:

+5 的原码:0x00000005

-5 的原码:0x80000005(最高位 8 表示符号位为 1)

3. 十六进制的反码

反码是为了解决原码加减法的问题而提出的。正数的反码与原码相同,负数的反码是对原码的数值部分逐位取反(符号位不变)。

规则

正数:与原码相同。

负数:符号位为 1,数值部分逐位取反。

示例

+5 的反码:0x00000005(与原码相同)

-5 的反码:

原码:0x80000005

数值部分取反:0x7FFFFFFA

因此,-5 的反码为:0x7FFFFFFA

4. 十六进制的补码

补码是目前计算机中最常用的表示方法,解决了反码的问题正数的补码与原码相同,负数的补码是对反码加 1。

规则

正数:与原码相同。

负数:符号位为 1,数值部分逐位取反后加 1。

示例

+5 的补码:0x00000005(与原码相同)

-5 的补码:

原码:0x80000005

反码:0x7FFFFFFA

补码:0x7FFFFFFB(反码加 1)

5. 十六进制补码的运算

补码的优势在于可以直接进行加减法运算,无需额外处理符号位。

示例:计算 5 + (-3)

5 的补码:0x00000005

-3 的补码:

原码:0x80000003

反码:0x7FFFFFFC

补码:0x7FFFFFFD

相加:

0x00000005 (5)

+0x7FFFFFFD (-3)


0x80000002

结果为 0x80000002,即 2。

6. 十六进制补码的范围

对于 32 位十六进制数(8 位十六进制):

正数范围:0x00000000 到 0x7FFFFFFF(0 到 2,147,483,647)

负数范围:0x80000000 到 0xFFFFFFFF(-2,147,483,648 到 -1)

7. 总结

原码:直接表示数值,最高位为符号位

反码:正数与原码相同,负数为原码数值部分取反

补码:正数与原码相同,负数为反码加 1

十六进制补码:与二进制补码的原理相同,只是用十六进制表示。

通过十六进制补码,计算机可以高效地进行有符号整数的加减法运算,同时避免了符号处理的复杂性。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了八进制、十六进制的原码、反码、补码。

相关推荐
风吹花中花吹风3 小时前
原创-锐能微82xx系列电能计量芯片软件驱动开发与精度校准流程完全指南
驱动开发·单片机·嵌入式硬件·锐能微·计量芯片·精度校准·电能表校准
青牛科技-Allen8 小时前
GC8871刷式直流电机驱动器深度解析:3.6A驱动与内置电流检测技术
单片机·嵌入式硬件·音视频·音响·电动工具·散热风扇·电脑散热风扇
月阳羊12 小时前
【硬件-笔试面试题】硬件/电子工程师,笔试面试题-26,(知识点:硬件电路的调试方法:信号追踪,替换,分段调试)
笔记·嵌入式硬件·面试·职场和发展
嵌入式小白牙15 小时前
ARM-I2C软实现
stm32·单片机·嵌入式硬件
金色光环15 小时前
【阅读整理】野火ADC_AD7192模块资料
单片机·嵌入式硬件
jllllyuz16 小时前
基于AD7147电容触摸芯片与STC12C5A60S2单片机方案
单片机·嵌入式硬件
范纹杉想快点毕业19 小时前
ZYNQ芯片,SPI驱动开发自学全解析个人笔记【FPGA】【赛灵思
stm32·单片机·嵌入式硬件·mcu·架构·51单片机·proteus
景彡先生19 小时前
STM32 GPIO(通用输入输出)详解:从模式原理到实战应用
stm32·单片机·嵌入式硬件
苏州向日葵20 小时前
篇五 网络通信硬件之PHY,MAC, RJ45
网络·嵌入式硬件
GalaxySinCos20 小时前
07 51单片机之定时器
单片机·嵌入式硬件·51单片机