🧀

数制与编码

  • 定点小数补码1000 0000表示-1

  • 定点整数补码1000 0000表示-128

  • 移码只能表示整数

  • C语言强制类型转换

    • 无符号数和有符号数:不改变数据内容,改变解释方式
    • 长整数变短整数:高位截断,保留低位
    • 短整数变长整数:符号扩展
  • 为什么要对数据进行长度扩展?

    • ALU的位数是固定的
    • 通用寄存器的位数是固定的
    • 主存内的各种数据的长度不一,有时需要把短数据扩展为长数据
  • 零扩展:适用于无符号整数,用0扩展高位

  • 符号扩展:适用于有符号整数(补码),用符号位扩展高位

  • 异或妙用:n bit进行异或,有奇数1,异或结果为1偶数1,异或结果为0

  • 反演律

A+B=AB\overline{A+ B}=\overline{A} \cdot \overline{B}

AB=A+B\overline{A\cdot B}=\overline{A} + \overline{B}

  • 主存地址用无符号二进制整数表示,不是原码!

运算方法与运算电路

  • 带标志位的加法器
缩写 全称 功能
OF Over Flag 1 溢出
SF Sign Flag 1 为负
ZF Zero Flag 1 结果为0
CF Carry Flag 1 溢出
\begin{gather*} OF=C_{n}\oplus C_{n-1} \\ SF=S_{n} \\ ZF=\overline{S_{n}+\cdots +S_{2}+S_{1}} \\ CF=C_{out} \oplus C_{in}=C_{n} \oplus C_{0} \end{gather*}
  • 原码的算术移位:符号位保持不变,仅对数值位进行移位
  • 无符号数溢出判断
    • 两个正数相加,进位位为0,则没有溢出
    • 两个负数相减,进位位为1,则没有溢出
  • 组合逻辑电路和时序逻辑电路区别
特性 组合逻辑电路 时序逻辑电路
记忆性
输出依赖 仅当前输入 当时的输入和过去的状态
时钟信号 通常不需要 大多数需要
反馈 通常无

浮点数的表示

  • 浮点数对阶中,小阶对大阶,不存在阶码减小的情况
  • IEEE754浮点数对阶,右规隐藏位的1直接移出来,显示地进入尾数部分
  • 补码:正数最高位有效位为1,负数最高位有效位为0
  • 只有浮点数才需要舍入,定点数没有舍入的概念
  • 在浮点数舍入中
    • 左规不用舍入
    • 对阶和右规都可能要舍入
    • 舍入不一定产生误差
  • 按边界对齐存储的含义是:信息单元的存储地址是其字节长度的整数倍,即起始地址%字节长度 = 0
  • P65-27
  • C标准没有明确规定有符号数右移是算数右移还是逻辑右移,这取决于编译器。为了代码的可移植性,最好避免对有符号数进行右移操作。如果题干说明了是无符号数,那么右移只能是逻辑右移 P66-31
  • C语言中的struct类型有两个重要要求:
    • 起始地址%该变量的长度 = 0
    • struct的长度必须是成员中最长对应值(即该变量的字节长度)的整数倍