《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记

怎么由逻辑电路实现二进制的加法

  首先二进制的加法可以拆解为两个步骤:加与进位。

+加法 0 1
0 0 1
1 1 0
+进位 0 1
0 0 0
1 0 1

  加这一步骤可以由异或门来完成,进位这一步骤则可以用与门来完成。

  但是由这两个逻辑门只能组成一个半加器,输入2个值,输出加和位与进位。这是不够的,除了最低位的加法不需要进位配合,其他位上的加法都要进位、加位与被加一起输入。

  所以需要能有3个输入2个输出的全加器。这可以由两个半加器组成。

减法的实现

  我们可以用加法器来实现减法,首先来一次简单的数学推导。

    253 - 176

  => 253 -176 + 1000 - 1000

  => 253 - 176 + 999 + 1 - 1000

  => 253 + (999-176) +1 - 1000

  (999 - 176)  可以称作176对9的补码,这样如果我们忽略-1000(确实可以忽略,因为假如我们这的输出位只有3位那么第四位上的1是不被输出的),那么用三的加法就可以完成一个减法运算。

  (999-176) +1 则可以称作是对10的补数。

  这是十进制下的推导,同样在二进制下一样成立。、

  所以对一个数的减法可以加上这个数的补码(二进制就是对2求补,十进制就是对10求补)即可。

如何实现储存

  有种电路有两种稳态,可记录二进位制数字信号“1”和“0,这就是触发器。

  基本RS触发器又称SR锁存器,是触发器中最简单的一种,也是各种其他类型触发器的基本组成部分。两个与非门或或非门的输入端输出端进行交叉耦合或首尾相接,即可构成一个基本RS触发器。

  

如何实现寻址

  要实现一个最基本的储存器,光光只有储存功能还不够,还要能有选择的储存与读取功能也就是要有寻址能力。

  假如我们有32位二进制来寻址,那么我们能选择232个单位的数据,如果一个单位的数据是一字节,那么32位寻址端的最多能储存大约是4GB的数据。这也是为什么随着电脑的内存越来越大,我们要换成64位的CPU与系统。因为超过4GB的储存,32位是无法寻址到的。

为什么是字节与十六位进制

  在早期的加法器中的位宽就是8位,现在用字节表示一组8比特数据。

  一字节由于有8位,其取值范围为00000000到11111111,也可以表示0~255之间的正整数,通过补码也能表示-128~127范围内的正、负整数。虽然一个8位的二进制10110110自然并直观,但不够简洁。这是我们就可以使用十六位进制来表达。一个十六位进制的数能表达4位二进制即半字节。所以一个字节只需要2个十六位进制就行,10110110就可以拆分成1011与0110,即b6h(h表明这是一个十六位进制的数)表达。

怎么实现自动操作

  首先我们要有一个振荡器,它能在不需要人工干涉的情况下自动输出0与1。其经常被称为时钟,因为通过震荡可以进行计时。一个循环(cycle)就是振荡器从某个初始状态经过一段时间又回到先前的初始状态的这一段时间,又称为一个周期。周期的倒数就是这个震荡器的频率(frequency),例如20Hz就是指振荡器每秒产生20次循环。

  我们能利用振荡器实现一个计数器,能循环计数。例如一个16位的计数器能累积000h~ffffh。

  储存在RAM中的代码分为2种:一种是指令,让电路执行何种操作,其往往包含要操作数据的地址。另一种是数据,要被执行的代码。

  计数器是种能连续累加的电路,但RAM中储存的代码往往不是连续的,那么我们需要一种方法能重新选择开始执行代码的位置的指令,即jump,通过重置计数器便可以实现。

  

什么是总线

  总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。从另一个角度来看,如果说主板(Mother Board)是一座城市,那么总线就像是城市里的公共汽车(bus),能按照固定行车路线,传输来回不停运作的比特(bit)。这些线路在同一时间内都仅能负责传输一个比特。因此,必须同时采用多条线路才能发送更多数据,而总线可同时传输的数据数就称为宽度(width),以比特为单位,总线宽度愈大,传输性能就愈佳。总线的带宽(即单位时间内可以传输的总数据数)为:总线带宽 = 频率 x 宽度(Bytes/sec)。

  PC上一般有五种总线:

  • 数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。
  • 地址总线(Address Bus):用来指定在RAM(Random Access Memory)之中储存的数据的地址。
  • 控制总线(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备,一般常见的为USB Bus和1394 Bus。
  • 扩展总线(Expansion Bus):可连接扩展槽和电脑。
  • 局部总线(Local Bus):取代更高速数据传输的扩展总线。

 定点数与浮点数

  首先我们来介绍下BCD码(Binary-Coded Decimal),是一种二进制的数字编码形式,用二进制编码的十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。由于2的补数不于BCD码一起使用,所以BCD码需要增加一位来表示负数。

  例如-4,325,120.25可以表示为如下5个字节:

  00010100 00110010 01010001 00100000 00100101

  14h          32h          51h          20h          25h

  在上面的例子中,小数点位置在2位小数之前。关于小数点位置的信息并没有储存在数字中,它的位置是固定的。

  基于这个二进制的储存和标记方式就是定点格式(fixed-point format)。

  顾名思义,浮点数就是其小数点的位置不确定。其二进制的储存方法如下:

  

  sign是符号位,exponent是指数位(单精度8位,双精度11位),fraction是有效位(单精度23位,双精度52位)。

  这是不是很像我们平时用到的科学计数法。

  但这种方法会带来一个问题,就是在有效位超过一定时会有精度问题。

console.log(9007199254740992 === 9007199254740993); //true
console.log(9007199254740992 === 9007199254740994); //false

  是的,这相等。

   因为 前两者都会被储存为 1.000...(52个零)×253

   9007199254740994  则会被保存为1.000...0001×253 。

   其影响精度的因素是有效位数,在双精度的条件下有效位是53位(包含了符号位),由于210~103,所以双精度下能保证15位的十进制有效数,单精度则是7位。

时间: 2024-10-11 14:45:23

《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记的相关文章

SQL 笔记 By 华仔

-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录

SQL笔记---多表左联

这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,        SUM(ISNULL(orderQuery.OrderTotal, 0))        - SUM(ISNULL(removeQuery.RemoveTotal, 0))        - SUM(ISNULL(pickQuery.PickTotal, 0))        - SUM(IS

SQL笔记---分页

随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_StockWHERE   ( Rk_SkuCode > ( SELECT MAX(Rk_SkuCode)                         FROM   ( SELECT TOP 40                                            *           

《HeadFirst SQL》笔记

规范化 0 约束 1 原子性 2 第一范式 1NF 3 数据模式 4 依赖 5 联接查询 6 交叉联接(AKA 笛卡尔联接,叉积) 7 内联接 8 子查询 9 外联接 10 自联接 11 集合 12 事务 13 ACID 14 管理事务 15 常用语句 16 注意 17 规范化 约束 NOT NULL UNIQUE PRIMARY KEY DEFAULT FOREIGN KEY:引用父表的某个唯一值引用完整性:插入外键列的值必须已经存在于父表的来源列中 --创建外键 create table i

SQL笔记1:SELECT及SELECT高级应用

T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:GROUP BY 7.1:GROUP BY ALL 7.2:HAVING 8:SELECT字句技术 8.1:使用DISTINCT消除重复值 8.2:返回拼接的结果 8.3使用INTO字句 9:子查询 9.1:子查询类型 9.2:代替表达式的查询 9.3:多层嵌套 10:比较使用 EXISTS 和 IN 的

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

Mybatis 项目开发实际常用SQL笔记总结

parameterType 和 resultType parameterType:单个参数用String,多个参数用map resultType:   可以是 Integer.String.Object    <select id="countGroupMasterByUid" parameterType="String" resultType="Integer">      SELECT              COUNT(id)

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql笔记

1. 看下面sql,重点有两个,一个是distinct  ,一个是树形结构查询 select DISTINCT t.unit_code from t_unit_relation t where t.corp_tn='jiaozhougongan' start with t.unit_code='0001' connect by prior t.unit_code = t.unit_upcode 分析: ① distinct:去重复值 ② 树形结构查询,这个博客:http://www.cnblog

HeadFirst SQL 读书摘要

数据库都是用 圆柱形表示的. 数据库中包含表 表中包含行和列 行又叫记录record,  列又叫 字段field 创建数据库 create database mypipe_l; 选择数据库 use mypipe_l; 创建表 create table doughnut( name VARCHAR(10), type VARCHAR(6) ); 查看表 desc doughnut; 删除表 drop table doughnut; 插入数据 insert into doughnut (name,