当前位置: 首页 > article >正文

day3 微机运算基础

文章目录

    • 1. 引言
    • 2. 进位计数制
      • 2.1 基本概念
      • 2.2 常见进制
    • 3. 不同进制之间的转换
      • 3.1 其他进制转十进制
      • 3.2 十进制转其他进制
      • 3.3 二进制与八进制、十六进制的转换
    • 4. 二进制编码
      • 4.1 BCD码(Binary-Coded Decimal)
      • 4.2 格雷码(Gray Code)
      • 4.3 ASCII码
    • 5. 二进制数的运算
      • 5.1 算术运算
      • 5.2 逻辑运算
    • 6. 数的定点与浮点表示
      • 6.1 定点数
      • 6.2 浮点数(IEEE 754标准)
    • 7. 带符号数的表示法
      • 7.1 原码、反码、补码
      • 7.2 补码的优势
      • 7.3 溢出检测
    • 8. 总结


1. 引言

微机运算基础是计算机科学和电子工程的核心内容。理解计算机如何表示和处理数据,是学习计算机体系结构、编程和数字逻辑设计的前提。本文将主要学习进位计数制、进制转换、二进制运算方法,以及数值的定点、浮点表示和带符号数的表示。


2. 进位计数制

2.1 基本概念

进位计数制是一种按进位规则表示数值的方法,其核心要素包括:

  • 基数(Base):一个数位可用的字符或数码的个数,可用于区别不同数制(比如如十进制的基数为10,十六进制的基数为16)。
  • 权值:每个数位代表的值为数码值乘以基数的幂次(如十进制数123中,1的权值为 1 0 2 10^2 102)。

几进制就是逢几进一,比如十进制数到10需要进位,八进制数到8需要进位。

2.2 常见进制

  1. 十进制(Decimal):基数为10,数码为0-9。
  2. 二进制(Binary):基数为2,数码为0和1,是计算机内部运算的基础。
  3. 八进制(Octal):基数为8,数码为0-7。
  4. 十六进制(Hexadecimal):基数为16,数码为0-9和A-F(A=10, B=11, …, F=15)。
    以21为例,按照上述顺序,用这些进制分别进行表示:
    方法一: 2 1 10 、 1010 1 2 、 2 5 8 、 1 5 16 21_{10} 、10101_2 、 25_8 、 15_{16} 21101010122581516
    方法二: 21 H 、 10101 B 、 25 Q 、 15 H 21H、10101B、25Q、15H 21H10101B25Q15H
    方法三: 21 、 0 b 10101 、 0 o 25 、 0 x 15 21、0b10101、0o25、0x15 210b101010o250x15

方法一是下标的形式进行区分。
方法二是使用后缀加以区分,注意到八进制的后缀是Q,这是因为O与0很像,所以用Q代替O,当然有的地方还是以O作为后缀,不必过多纠结,按照上面人的要求即可。
方法三则是添加前缀进行区分。


3. 不同进制之间的转换

进制之间的转换方法总结于下图,可作为参考。

在这里插入图片描述

3.1 其他进制转十进制

因为十进制是人类最熟悉的数制,因此我们把原来进制按每一个位展开,在进行求和即可。
按权展开法:将每个数码乘以基数的幂次后求和。
示例

  • 二进制数 ( 1011.01 ) 2 = 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 + 0 × 2 − 1 + 1 × 2 − 2 = 11.2 5 10 (1011.01)_2 = 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 + 0×2^{-1} + 1×2^{-2} = 11.25_{10} (1011.01)2=1×23+0×22+1×21+1×20+0×21+1×22=11.2510
  • 十六进制数 ( 3 A . F ) 16 = 3 × 1 6 1 + 10 × 1 6 0 + 15 × 1 6 − 1 = 58.937 5 10 (3A.F)_{16} = 3×16^1 + 10×16^0 + 15×16^{-1} = 58.9375_{10} (3A.F)16=3×161+10×160+15×161=58.937510

3.2 十进制转其他进制

十进制转换为其他进制,就类似于分组的思维,所以我们需要除以基数

  • 整数部分:除基取余法(从下往上取余数)。
  • 小数部分:乘基取整法(从上往下取整数)。
    示例:将 25.37 5 10 25.375_{10} 25.37510转换为二进制:
    • 整数部分: 25 ÷ 2 = 12 25 ÷ 2 = 12 25÷2=12 余1 → ( 11001 ) 2 (11001)_2 (11001)2
    • 小数部分: 0.375 × 2 = 0.75 0.375 × 2 = 0.75 0.375×2=0.75 取0 → 0.75 × 2 = 1.5 0.75 × 2 = 1.5 0.75×2=1.5 取1 → ( . 011 ) 2 (.011)_2 (.011)2
    • 结果: ( 11001.011 ) 2 (11001.011)_2 (11001.011)2
      小数与正数取方向的要进行区分,可以简单记忆为:每一次运算出来的结果往“边缘”跑。
      在这里插入图片描述

3.3 二进制与八进制、十六进制的转换

对于八进制和十六进制,可以观察到 8 = 2 3 、 16 = 2 4 8=2^3、16=2^4 8=2316=24 ,也就是说3位二进制可对应1位的八进制,4位二进制就一位的十六进制。因此,我们可以沿着这个思路进行二进制到八进制与十六进制的转换。

  • 二进制→八进制:每3位二进制为一组,转换为1位八进制(不足补零)。
  • 二进制→十六进制:每4位二进制为一组,转换为1位十六进制。
    示例
    ( 10110110 ) 2 (10110110)_2 (10110110)2 → 分组为10 110 110 → 八进制 ( 266 ) 8 (266)_8 (266)8
    ( 10110110 ) 2 (10110110)_2 (10110110)2 → 分组为1011 0110 → 十六进制 ( B 6 ) 16 (B6)_{16} (B6)16

同样的,如果是八进制、十六进制转换为二进制,则是反过来即可。

  • 八进制 → 二进制: 1对3
  • 十六进制 → 二进制: 1对4
    示例
    八进制 ( 266 ) 8 (266)_8 (266)8 →分组为2 6 6 → 转为 10 110 110 ( 10110110 ) 2 (10110110)_2 (10110110)2
    十六进制 ( B 6 ) 16 (B6)_{16} (B6)16 →分组B 6 → 对应1011 0110 ( 10110110 ) 2 (10110110)_2 (10110110)2

4. 二进制编码

计算机只能识别二进制数,因此我们需要把所有的信息都一一对应到二进制编码中,而上述的二进制码仅仅代表数字之间的运算,对于字符,键盘的输入等都需要有二进制代码,所以设计了一些有标准的,符合人的直觉的二进制编码。

4.1 BCD码(Binary-Coded Decimal)

用4位二进制表示1位十进制数(如 2 9 10 = 0010   100 1 B C D 29_{10} = 0010\ 1001_{BCD} 2910=0010 1001BCD),适用于需要精确十进制运算的场景(如金融计算)。像这种设计,把十进制的每一位分开写成二进制,就不会很费脑筋。

需要注意的是,占一位十进制的数字只能是 0~9,因此对应的4位二进制范围也只能是 0000~1001,至于1010~1111就相当于浪费了。

4.2 格雷码(Gray Code)

相邻数值仅有一位不同,用于减少传感器或通信中的错误。
转换规则:二进制码 → 格雷码:保留最高位,其余每位与前一位异或。

4.3 ASCII码

用7位二进制表示128个字符(包括字母、数字和控制符),扩展ASCII码使用8位。这里的数字就不是运算的数值了,比如数字 1 ,实际上是字符 1,背后则是00110001
需要记住一些常用的 ASCII 码,比如:

字符十六进制十进制字符十六进制十进制
030H48回车0DH13
A41H65空格20H32
a61H97退格08H8

因为背后的二进制码太过冗长,且难以记忆,因此我们通常转换为十六进制或者十进制进行记忆。


5. 二进制数的运算

5.1 算术运算

  1. 加法:逢2进1(如 1011 + 0110 = 10001 1011 + 0110 = 10001 1011+0110=10001)。
  2. 减法:借1当2(需处理补码,见第7节)。
  3. 乘法:移位相加(如 101 × 11 = 1111 101 × 11 = 1111 101×11=1111)。
  4. 除法:类似十进制的长除法。

5.2 逻辑运算

  • 与(AND):全1则1,否则0。
  • 或(OR):有1则1。
  • 非(NOT):取反。
  • 异或(XOR):相同为0,不同为1。

6. 数的定点与浮点表示

6.1 定点数

  • 整数:小数点固定在最低位右侧(如16位整数范围为 − 32768 -32768 32768 32767 32767 32767)。
  • 小数:小数点固定在最高位右侧(如8位定点小数可表示范围 0.00390625 0.00390625 0.00390625 0.99609375 0.99609375 0.99609375)。

6.2 浮点数(IEEE 754标准)

用科学计数法表示数: N = ( − 1 ) S × M × 2 E N = (-1)^S × M × 2^E N=(1)S×M×2E

  • 单精度(32位):1位符号位(S),8位阶码(E),23位尾数(M)。
  • 双精度(64位):1位符号位,11位阶码,52位尾数。
    规格化处理:调整阶码使尾数最高位为1(背后隐含存储)。

7. 带符号数的表示法

7.1 原码、反码、补码

  1. 原码:最高位为符号位(0正1负),数值部分直接转换(如 − 5 10 = 10101 -5_{10} = 1 0101 510=10101)。
  2. 反码:正数同原码,负数符号位不变,数值位取反( − 5 10 = 11010 -5_{10} = 1 1010 510=11010)。
  3. 补码:正数同原码,负数为反码+1( − 5 10 = 11011 -5_{10} = 1 1011 510=11011)。
    除了补码可以表示范围是:+127D~128D,原码和反码的范围只能是+127D~-127D

7.2 补码的优势

  • 统一加减法:减法可转换为加法(如 A − B = A + ( − B ) 补 A - B = A + (-B)_{补} AB=A+(B))。
  • 消除+0和-0歧义:补码中0的唯一表示为全0。

7.3 溢出检测

溢出,是对于带符号数的运算结果而言。
只有在当两个正数相加结果为负,或两个负数相加结果为正时,才会发生溢出。
这里总结的判断方法有两个:
一是看两个数符号是否一致,不一致一定不会溢出,一致则判断运算结果是否正确,运算错误一定溢出。
二是双进位法,即通过符号位,数值最高位,这两个位置的进位状态取异或的结果,如果结果是1,则溢出。


8. 总结

主要掌握进制之间的转换,因为这部分也是模电要求的内容,涉及到底层会比较重要,其次则是一些常用的ASCII码的记忆,这些可能在编程的时候会用到,最后需要分清补码,原码,反码这些概念,还有溢出的判断方法。


http://www.kler.cn/a/593848.html

相关文章:

  • 找素数(java)
  • 使用vue3和vue-router实现动态添加和删除cachedViews数组
  • MATLAB中orderfields函数用法
  • 对接股票金融数据源API
  • Dify 项目开源大模型应用开发平台
  • Ecovadis认证咨询辅导的分级体系是什么?
  • Prime: 1靶场渗透测试
  • 【Linux】——进程状态僵尸进程孤儿进程
  • Vue3 集成wangEditor 5
  • HarmonyOS Next~鸿蒙系统性能优化全解析:检测、分析与场景实践
  • Excel(函数进阶篇):函数与控件、定义名称、OFFSET函数、动态抓取图片
  • VNA操作使用学习-14 再测晶振特性
  • 论文略读(2025.3.18-更新中)
  • TCP心跳消息
  • Grid 布局实现三栏布局
  • Java 反射详细教程
  • L2TP实验
  • 低空飞行管控服务智慧城市关键技术与挑战
  • Redis常用进阶 存储原理和主从思路
  • [AI速读]混合语言IP集成:挑战与高效解决方案