自底向上了解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.pswp.cn/pingmian/95588.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache poi与Office Open XML关系

以下内容来自AI https://ecma-international.org/publications-and-standards/standards/ecma-376/ 官方规范 https://poi.apache.org/components/oxml4j/index.html java中针对Office Open XML的实现 Apache poi中各个组件 https://poi.apache.org/components/index.html …

S32K328上芯片内部RTC的使用和唤醒配置

1:RTC介绍 1.1 RTC基础功能介绍 参考《S32K3xx Reference Manual》,S32K328芯片内部自带RTC功能,并且支持从低功耗状态下唤醒设备;1.2 RTC电源介绍 由以下三张图可知 1:RTC由V11供电,V11依赖外部V15供电&am…

【Python】数据可视化之分类图

目录 条形图 箱形图 散点图 分簇散点图 小提琴 分簇小提琴 条形图 条形图是一种直观的图表形式,它通过不同长度的矩形条(即“条形”)来展示数值变量的中心趋势估计值,其中每个矩形的高度直接对应于该组数据的某个中心量度&…

RabbitMQ模型详解与常见问题

项目demo地址:https://github.com/tian-qingzhao/rabbitmq-demo 一、RabbitMQ组件概念 1.1 Server:接收客户端的连接,实现AMQP实体服务。 1.2 Connection:连接 应用程序与Server的网络连接,TCP连接。 1.3 Channel&…

网络:相比于HTTP,HTTPS协议到底安全在哪?

网络:相比于HTTP,HTTPS协议到底安全在哪? 我们知道HTTPS也是一种应用层协议,它在HTTP的基础上有一层加密,因为HTTP的数据传输都是以明文方式传输的,所以加密主要是为了防止数据在传输的时候被篡改 今天我…

AI 基础设施新范式,百度百舸 5.0 技术深度解析

本文整理自 2025 年 8 月 29 日百度云智大会 —— AI 算力平台专题论坛,百度智能云 AI 计算首席科学家王雁鹏的同名主题演讲。大家下午好!昨天在主论坛,我们正式发布了百度百舸 AI 计算平台 5.0,并展示了多项亮眼的性能数据。今天…

IO进程线程;多线程;线程互斥同步;互斥锁;无名信号量;条件变量;0905

思维导图多线程打印ABC运用无名面量 实现进程同步#include<myhead.h> //定义 无名信号量 sem_t sem1; sem_t sem2; sem_t sem3; //线程1 void* task1(void *arg) {while(1){sem_wait(&sem1);printf("A");fflush(stdout);sleep(1);sem_post(&sem2);} } …

固高 GTS-800 运动控制卡完全使用指南:从硬件部署到高阶应用

固高 GTS-800 系列运动控制卡作为中端工业控制领域的标杆产品,以其 8-16 轴同步控制能力、丰富的插补功能和稳定的性能,广泛应用于激光加工、PCB 制造、精密装配等自动化设备中。本文将系统讲解 GTS-800 的硬件架构、开发环境搭建、核心功能实现及工程实践技巧,帮助工程师快…

STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践

导言 STM32 - Embedded IDE - GCC - 如何在工程中生成.bin格式固件 STM32 - Embedded IDE - GCC - 使用 GCC 链接脚本限制 Flash 区域 STM32 - Embedded IDE - GCC - 如何在工程中定义一段 NoInit RAM 内存 STM32 - Embedded IDE - GCC - 如何将编译得到的.bin固件添加CRC32校验…

HTTP协议——理解相关概念、模拟实现浏览器访问自定义服务器

文章目录HTTP协议理解相关概念HTTP相关背景知识认识URLHTTP协议在网络通信的宏观认识urlencode & urldecodeHTTP请求和应答的格式模拟实现浏览器访问自定义服务器关于http requesthttp request的请求行——URI使用浏览器完成静态资源的访问常用的报头属性http response状态…

【服务器】英伟达M40显卡风冷方案心得

在之前的博文中&#xff0c;博主说到最近准备自己组装一台服务器&#xff0c;主要用于有限元仿真&#xff0c;其次兼顾一部分AI机器学习的工作&#xff0c;于是博主就入手了一张英伟达Tesla M40的12G显卡GPU。本来博主也纠结过是买M40还是M60&#xff0c;后来在网上看到说M60看…

Java中的锁升级机制

目录 核心思想 Java对象头&#xff08;Object Header&#xff09;与Mark Word 锁升级的详细步骤 1. 无锁&#xff08;No Lock&#xff09; 2. 偏向锁&#xff08;Biased Locking&#xff09; 3. 轻量级锁&#xff08;Lightweight Lock&#xff09; 4. 重量级锁&#xff…

Scikit-learn Python机器学习 - 特征预处理 - 标准化 (Standardization):StandardScaler

锋哥原创的Scikit-learn Python机器学习视频教程&#xff1a; 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识&#xff0c;包括机器学习概述&#xff0c;特征工程(数据…

windows下wsl2 ubuntu开发配置

配置环境变量# 设置方式 命令/文件 生效范围 适用场景 # 临时 export FORCE_UNSAFE_CONFIGURE1 当前终端 临时编译软件 # 用户级永久 ~/.bashrc或~/.profile 当前用户 长期使用&#xff08;单用户&#xff09; # 系统级永久 /etc/environment或/…

网络编程 05:UDP 连接,UDP 与 TCP 的区别,实现 UDP 消息发送和接收,通过 URL 下载资源

一、概述 记录时间 [2025-09-02] 前置文章&#xff1a; 网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 网络编程 02&#xff1a;IP 地址&#xff0c;IP 地址的作用、分类&#xff0c;通过 …

告别线缆束缚!AirDroid Cast 多端投屏,让分享更自由

AirDroid Cast 是一款功能强大的跨平台投屏应用&#xff0c;能够轻松实现手机、电脑之间以及手机之间的屏幕共享与控制。无论是工作演示、在线教学还是游戏直播&#xff0c;AirDroid Cast 都能提供流畅稳定的投屏体验。 1. 下载与安装 您可以通过以下链接下载 AirDroid Cast&…

从零开始学大模型之大模型训练流程实践

大模型训练流程实践 本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型开发 学习视频/籽料/面试题 都在这>>Github<< >>Gitee<< 6.1 模型预训练 在上一章&#xff0c;我们逐步拆解了 LLM 的模型结构及训练过程&#xff0c;从零手…

一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)

第一步&#xff1a;下载anaconda for mac https://zhuanlan.zhihu.com/p/350828057 知乎保姆级教程 https://www.anaconda.com/docs/getting-started/anaconda/install#macos-linux-installation 下载地址 第二步&#xff1a;部署vllm的虚拟环境 https://www.53ai.com/news/Op…

Go语言Range用法全解析

引言Go 语言中的 range 关键字是集合遍历的核心语法结构&#xff0c;它提供了一种高效且类型安全的方式来迭代各种数据结构。range 的设计完美体现了 Go 语言的工程哲学 - 通过最小化的语法提供最大化的功能。标准库中的许多关键组件&#xff08;如 sync.Map、bufio.Scanner 等…

mysql进阶语法(视图)

1、视图概念 是从一个或多个表中导出来的表&#xff0c;它是一种虚拟存在的表&#xff0c;表的结构和数据都依赖于基本表 应用场景&#xff1a; 多个地方用到同样的查询结果该查询结果用到复杂的select语句 视图优点&#xff1a; 简化查询语句&#xff1a;简化用户的查询操作&a…