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

自底向上了解CPU的运算

文章目录

    • 引言
    • CPU如何实现逻辑运算
      • NMOS和PMOS
      • 基于MOS管组合下的逻辑门运算
      • 逻辑运算下运算的实现
      • ALU的诞生
      • CPU的诞生
    • 关于二进制运算的研究
      • 十进制转二进制基础换算
      • 为什么负数要使用补码进行表示
      • 为什么反码就能解决正负数相加问题,我们还需要用补码来表示负数呢?
      • 小数的二进制转换
    • 计算机如何保存带有小数的数据
      • 科学计数法
      • 如何用二进制空间表示科学计数法的结果
    • 详解0.1+0.2==0.3返回false
      • 问题描述
      • 解决方案
      • 编程中运算的一点建议
    • 小结
    • 参考

引言

本文将从CPU演变的视角逐步推进说明CPU演进过程,同时也会针对计算机数学运算过程中一些常见的错误细节进行探讨。

CPU如何实现逻辑运算

NMOS和PMOS

CPU是由晶体管构成,在逻辑上我们一般会将其通过电路符号进行抽象,即分为如下三个连接端:

  1. 栅级(gate)
  2. 源极(source)
  3. 漏极(drain)

基于NMOS而言,从语义上来理解,它是消极的MOS管(N即negative),所以它的电流是逆流而上的,这也就是为什么下图中寄生二极管(即右边的箭头)的朝向是由源极(S)到漏极(D)即通过这样的导向避免漏极电流无条件从漏极流向源极,从N的语义上理解,因为电流是消极的流向,所以输出电流也必须付出更大的努力才能导通电源,所以NMOS的规范为:

在这里插入图片描述

  1. 当输入二进制1时,栅极闭合,电路导通,电流从漏极流向源极
  2. 当输入二进制00时,栅极电源断开,电路无法导通

在这里插入图片描述

PMOS反之,可以看到寄生二极管从漏极指向源极避免源极无条件流向漏极,因为PMOS是积极的(P即positive),即无需过多努力即可导通电源,所以其电路运行机制为:

  1. 当输入0时,栅极闭合,电路直接导通,从源极直接流向漏极
  2. 当输入1,栅极断开,电路无法导通

在这里插入图片描述

基于MOS管组合下的逻辑门运算

基于上述电路符号的基础上,我们将二者结合,NMOS接地、PMOS接电源,试想这样我们输入数字1:

  1. 对于NMOS电源导通,输出端Y导通,接地连同
  2. 对于PMOS电源断开,与电源端断开
  3. 最终没有亮起输出0

在这里插入图片描述

同理,我们不妨再尝试输入0:

  1. 对于NMOS电源断开
  2. 对于PMOS电源导通
  3. 电源端导通,输出1

在这里插入图片描述

由此可知,输出结果与输入结果相反,就生成二进制中的非运算,而上述的组合我们也称之为非门。同理,设计者们基于NMOS和PMOS这两种晶体管搭建出各种各样的门电路:

  1. 与门
  2. 或门
  3. 非门
  4. 与非门
  5. 或非门
  6. 异或门

在这里插入图片描述

逻辑运算下运算的实现

基于逻辑门的基础,我们开始推进计算机运算的步骤,我们都知道计算机是二进制语言,对应我们以加法为例,对应的运算为:

  1. 0+0=0 即二进制的00+00,最终输出二进制结果为00
  2. 0+1=1 即二进制中的00+01,最终输出二进制结果为01
  3. 1+1=2 即二进制中的01+01,最终输出二进制结果为10

最终我们将这些数字的二进制运算转为换下图所示的表格,我们以1+1为例,可以看到输出二进制结果为10,对应的低位为0,而进位为1,由此得出10。

在这里插入图片描述

我们从最基础的规律抓起,可以看到低位的0本质上不就是异或运算:

  1. 第一行低位的0本质上就是 0^0,对应输出0
  2. 第一行低位的0本质上就是 0^1,对应输出1
  3. 第一行低位的0本质上就是 1^1,对应输出0

然后我们就需要考虑另一个问题,即进位问题,经过推理发现本质上就是按位与,同样结合表格可以看出,对应的进位本质上就是低位运算的按位与:

  1. 第一行低位的0本质上就是 0&0,对应输出0
  2. 第一行低位的0本质上就是 0&1,对应输出0
  3. 第一行低位的0本质上就是 1&1,对应输出1

最终我们完成低位的加法运算推导过程,即通过:

  1. 异或门计算低位和
  2. 与门计算进位

在这里插入图片描述

对应的我们将上述的逻辑视图换成如下符号表示,读者可结合图片中的语义自行理解:

在这里插入图片描述

但是我们加法中还是涉及一些高位累加的,例如15+9对应9+5的进位就需要参与到高位的运算中,所以说我们目前的加法器只是一个简单的半加法器。

关于二进制进位的运算,通过低位进位和高位和进行按位或解决,我们试想3+3j即二进制的11和11相加,对应的换算步骤为:

  1. 低位两个1使用半加器算得和为0、进位1。
  2. 高位两个1使用半加器算得和为0、进位1。
  3. 因为低位有个进位1,也就是10对应高位的和,两者进行按位或得到1。
  4. 结合低位和0,高位和和低位进位按位或得到1,高位进位1,得到二进制110也就是6:

在这里插入图片描述

同理我们再演示一下2+2也就是二进制10和10相加:

  1. 低位算得和0进位也为0
  2. 高位算得和为0进位为1
  3. 低位进位0和高位和0按位或得0
  4. 结合低位0、高位和与低位进位0算法低2位为0,高位进位为1即100
  5. 最终结果为4

在这里插入图片描述

通过这种运算,我们推理出全加法器,在此基础上,串联无数个全加法器生成更高进位的加法运算。

http://www.xdnf.cn/news/1406629.html

相关文章:

  • 嵌入式常见架构
  • 【MYSQL】从混乱到清晰:联合查询帮你打通数据孤岛
  • 算法:插入排序
  • 公益免费二级域名
  • 解锁Tensor Core性能:深入探索CUDA Warp矩阵操作
  • Junior Engineer浅谈CAS
  • 【百度】C++开发(25届提前批 一面)面经
  • 时序数据库
  • GitHub 热榜项目 - 日榜(2025-08-31)
  • 使用cursor claude sonnet4的一些感受
  • PY32F002不小心设置了SWD复用的恢复
  • Chrome++插件与GreenChrome:增强Chrome浏览器功能
  • Spring Boot 3.0 应用 HTTP 到 HTTPS 技术改造方案
  • 《潮汐调和分析原理和应用》之四S_Tide使用2
  • Java中不太常见的语法-总结
  • 架构进阶——解读 69页 方法轮IT规划培训 架构-重点-细节【附全文阅读】
  • Shell编程核心入门:参数传递、运算符与流程控制全解析
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day11
  • 学习日志41 python
  • Linux/UNIX系统编程手册笔记:文件I/O、进程和内存分配
  • vue2下拉菜单
  • 【小宁学习日记5 PCB】电路定理
  • 9. 函数和匿名函数(一)
  • 快消品牌如何用 DAM 管理万张素材?
  • 【光照】[光照模型]是什么?以UnityURP为例
  • C++的反向迭代器
  • BEV-VAE
  • 二进制方式安装部署 Logstash
  • Java试题-选择题(23)
  • 【Linux基础】深入理解计算机启动原理:MBR主引导记录详解