计算机组成原理的学习笔记(2)--数据的表示和运算·其一

学习笔记

前言

本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。

正文

1. 浮点数表示

  • 浮点数结构

    • 符号位(1 位):表示数值的正负。

    • 阶码(8 位):表示指数部分,使用偏移量(bias)进行编码,多为 127。

    • 尾数(23 位):表示有效数字部分,隐含前导 1。

  • 小数点位置

    • 通过尾数和阶码共同决定。尾数部分隐含一个 1,小数点在这个数字之后,阶码调整小数点位置。

    • 由于尾数可以表示小数,而小数的n次方不像整型的n次方,小数可以表示的范围会更大,就变得能够表示很多数据了,表示的数据范围也更大了!

  • IEEE 754 标准:浮点数遵循该标准以表示真实世界中的数值,提供有效的数值范围。

2. 移码表示

  • 定义:移码是通过对数值加上一个固定的偏移量(bias),使得浮点数或有符号整数的表示能够规范化,也便于比较。

  • 转换

    • 正数的移码值:实际值 + 偏移量。

    • 负数的移码值:实际值 + 偏移量。

  • 特点:允许负数和正数直接进行比较,无需关注符号。

3. 补码和反码

  • 原码:最基本的表示方式,符号位 + 数值。

  • 反码:负数由原码的符号位不变,其余位取反。

  • 补码:在反码的基础上加 1。补码是计算机中使用的主要数值表示形式。

4. 运算后的符号判断

  • 加法结果判断

    • 使用符号位判断结果是正数还是负数。
  • 溢出

    • 两个同符号数相加,若结果符号位变化则发生溢出。

5. 符号位的影响

  • 进位与符号位:当进行补码的运算的时候,进位不会影响最终结果的符号位,符号位决定结果是否为正数或负数,而符号位之后的不考虑。

7. 整数溢出

  • 整数溢出 :由于补码表示的特性,当超出表示范围时,会出现负数等错误结果,例如,当进行超过这个int类型的运算时,溢出 就会发生。比如说,如果你尝试将2,147,483,647

    二进制中表示为:01111111 11111111 11111111 11111111加上 1, 正常情况下应为 2,147,483,648,但在 int 补码表示中,这是无法表示的。因为溢出,结果会变成:10000000 00000000 00000000 00000000,这对应于 -2,147,483,648。这就是我们常说的爆int,在VS中可以验证这一点,如图所示:

  • 而当在unsigned int 类型中,赋值负数,同时以%u输出,则会将符号位识别为数值,同时输出,这一点也可以在编译器中进行验证。

结语

在学习这个数据的表示的时候,我其实最开始感觉挺无趣的,但是后面发现神奇的可以和我们在编译器里面常见的数据溢出联系起来,就开始感兴趣了,果然计算机很厉害,很多东西都不是无厘头的,有一种理性的美。

相关推荐
雍凉明月夜2 分钟前
深度学习网络笔记Ⅱ(常见网络分类1)
人工智能·笔记·深度学习
卷心菜_3 分钟前
代码随想录笔记-背包问题
笔记
北岛寒沫3 分钟前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第十三课 垄断竞争)
人工智能·经验分享·笔记
love530love1 小时前
【笔记】Intel oneAPI 开发环境配置
人工智能·windows·笔记·oneapi·onednn·deep neural
HansenPole8251 小时前
元编程笔记
笔记·网络协议·rpc
charlie1145141911 小时前
Git团队协作完全入门指南(上)
笔记·git·学习·教程·工程
迷茫的启明星1 小时前
Git命令学习
git·学习
全栈陈序员2 小时前
说说你对 Vue 的理解
前端·javascript·vue.js·学习·前端框架
im_AMBER2 小时前
Leetcode 85 【滑动窗口(不定长)】最多 K 个重复元素的最长子数组
c++·笔记·学习·算法·leetcode·哈希算法