计算机组成原理(2)王道学习笔记

数据的表示和运算

提问:1.数据如何在计算机中表示?

2.运算器如何实现数据的算术、逻辑运算?

十进制计数法

古印度人发明了阿拉伯数字:0,1,2,3,4,5,6,7,8,9(符号反映权重

十进制:975=9x100+7x10+5x1 (符号所在的位置也反映权重

进位计数制 :有0~9,共十种符号。逢十进一

以此类推,十进制的这种计数方式,我们会用每一个数码位乘以这个数码位所对应的一个实际的权值。这些权值都是十的某次方,因此我们才把它叫做十进制。
其实呢,十进制能推广到 r 进制。r 进制里,基数就是 r,每个数码位能用 r 种符号。像古巴比伦人用的 60 进制,每个数码位就有 60 种符号,现在咱们算时间,1 小时 60 分钟,就是 60 进制的应用呢。不过在计算机世界里,常用的是二进制、八进制和十六进制。

r进制计数法

1.二进制 :计算机中最常用基数为2的计数制即二进制。它仅有0和1两种数码,计数规则是"逢二进一",任意数位的权为,i是所在位数。

2.八进制 :基数是8,有0 - 7共8个不同数码,计数"逢八进一"。由于r = 8=,所以把二进制中的3位数码编为一组就是1位八进制数码,二者转换很方便。

  1. 十六进制 :基数为16,有0 - 9、A - F共16个不同数码,其中A - F分别表示10 - 15,计数"逢十六进一"。因为r = 16 = ,所以4位二进制数码与1位十六进制数码相对应。可以用后缀字母标识数的进制,用B表示二进制数,用D表示十进制数(通常直接省略),用H表示十六进制数,有时也用前缀0x表示十六进制数。

在计算机中,有二进制、八进制、十进制、十六进制

计算机喜欢二进制,一是因为能用两个稳定状态的物理器件表示 0 和 1,像高电平低电平、电容电荷正负。二是 0 和 1 对应逻辑的假和真,方便做逻辑算。三是能用逻辑门电路做算术运算。不过二进制给人看不太方便,所以也常用八进制和十六进制。

二进制数转换为八进制数和十六进制数

对于一个二进制小数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位(十六进制)一组,在数的最左边可根据需要加"0"补齐;对于小数部分,从小数点开始往右数,也将一串二进制数分为3位一组或4位一组,在数的最右边也可根据需要加"0"补齐。最终使总的位数为3或4的整数倍,然后分别用对应的八进制数或十六进制数取代。

如果我们想要将二进制转换为八进制,那么只需要三个二进制为一组,然后将每组转换为对应的八进制符号即可。

各进制的常见书写方式

进制 书写方式 1 书写方式 2 书写方式 3
二进制 1010001010010B -
八进制 - -
十六进制 1652H 0x1652
十进制 1652D -

十进制转换成任意进制数

一个十进制数转换为任意进制数,通常采用基数乘除法(注意,基数的值与进制相关)。这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分采用除基取余法,对小数部分采用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来。

除基取余法(用于整数部分):对整数部分进行除基取余操作,最先获取的余数是数的最低位,最后获取的余数是数的最高位(即"除基取余,先余为低,后余为高" ),当商为0时操作结束。

乘积取整法(小数部分) :小数部分乘基取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位(乘基取整,先整为高,后整为低),乘积为1.0(或满足精度要求)时结束。

注意:

  1. 十进制数转换为任意进制数时,对于除基取余法和乘基取整法,以及所取之数放置位置的原理,应结合 r 进制数的数值表示公式思考,避免死记硬背。
  2. 在计算机中,整数和小数有区别,整数可连续表示,小数是离散的,不是每个十进制小数都能用二进制小数精确表示(如 0.3 乘二取整无法得到精确结果),但任意二进制小数都可用十进制小数精确表示,需引起重视。

真值和机器数

真值:符合人类习惯的数字

机器数:数字实际存到机器里的形式,正负号需要被"数字化"。

类型 定义 正数示例(以 + 15 为例) 负数示例(以 - 8 为例)
原码 最高位为符号位,0 表示正数,1 表示负数,其余位为数值位的二进制表示 01111(假设用 5 位二进制表示,下同) 11000
反码 正数的反码与原码相同;负数的反码是在原码的基础上,符号位不变,其余各位取反 01111 10111
补码 正数的补码与原码相同;负数的补码是在反码的基础上 + 1 01111 11000
移码 在补码的基础上,将符号位取反(一般用于浮点数的阶码表示) 11111 01000

相关推荐
寻丶幽风14 分钟前
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
论文阅读·笔记·深度学习·网络安全·差分测试
我是初九21 分钟前
【李沐-动手学深度学习v2】1.Colab学习环境配置
人工智能·python·学习·colab
KENYCHEN奉孝35 分钟前
Django 5 学习笔记总纲
笔记·学习·django
teeeeeeemo2 小时前
Vue数据响应式原理解析
前端·javascript·vue.js·笔记·前端框架·vue
蒙奇D索大2 小时前
【11408学习记录】考研数学攻坚:行列式本质、性质与计算全突破
笔记·学习·线性代数·考研·机器学习·改行学it
moxiaoran57532 小时前
uni-app学习笔记二十四--showLoading和showModal的用法
笔记·学习·uni-app
tcoding2 小时前
《基于Apache Flink的流处理》笔记
笔记·flink·apache
DartistCode2 小时前
动手学深度学习pytorch(第一版)学习笔记汇总
pytorch·深度学习·学习
汤姆和佩琦2 小时前
LLMs基础学习(八)强化学习专题(1)
深度学习·学习·强化学习·马尔可夫决策过程
代码小将3 小时前
java中static学习笔记
java·笔记·学习