目录

系列文章目录

一、信息存储

1.先导知识与概念

2.十六进制表示法

2.1 进制转换

3.字数据大小

4.寻址与字节顺序

4.1 寻址

4.2 字节顺序(大端法小端法)

4.3 编译选项

5.表示字符串与代码

6.布尔代数

7.C语言中的移位运算

8.整数表示

8.1 无符号整数

8.2 补码编码

8.3 无符号数与有符号数的转换

9.数位的扩展与截断

9.1 数位扩展

9.2 数位截断

10.整数运算

10.1 无符号整数加法

10.2 有符号整数加法

10.3 整数的乘运算(左移)

10.4 乘常数

10.5 例题

10.6 无符号数除2的幂

11.浮点数

11.1 浮点数的表示及转换

11.2 IEEE表示

11.2.1 数值形式

11.2.2 编码

11.2.3 规格化、非规格化、无穷大、NAN(不同编码的形式)

​11.2.4 IEEE例题

11.3 舍入

11.4 浮点数加法

11.5 浮点数乘法

11.6 整数与浮点数的转换

11.7 浮点数与整数例题

总结


系列文章目录

本系列博客重点在深圳大学计算机系统(2)课程的核心内容梳理,参考书目《深入理解计算机系统》(有问题欢迎在评论区讨论指出,或直接私信联系我)。

第一章 深入理解计算机系统01——计算机系统漫游_@李忆如的博客-CSDN博客​​​​​

第二章 深入理解计算机系统02——信息的表示与处理


梗概

本篇博客主要介绍深入计算机系统书目第二章信息的表示与处理的相关知识。


一、信息存储

1.先导知识与概念

① 大多数计算机使用8位的块(bit),或者字节,作为最小的可寻址的内存单位。

② 万物皆位,每一位都是0或1(易于电子实现),通过各种方式编码/解释比特集

2.十六进制表示法

对于位模式的描述来说,二进制表示法过于冗长,十进制表示法与位模式的互相转换很麻烦。替代的方法是,以16为基数(十六进制数),来表示位模式。

2.1 进制转换

十六进制转十进制:对应位乘上16的对应平方与数

十进制转十六进制:辗转相除,从底往上

3.字数据大小

每种结构的计算机都有固定长的二进制位作为一个字,用于指明整数与指针数据的标称大小。属于硬件概念,常见的有32位与64位字长两种。

Tips:可利用sizeof()输出某数据类型对应的字节。

尤其注意不同系统下不同的类型(long、pointer)

4.寻址与字节顺序

4.1 寻址

程序寻址——逻辑地址、虚地址(以数据的第一个字节为地址)

Tips:一个地址占用一个字节(8bits)

4.2 字节顺序(大端法小端法)

假设变量的类型为int,位于地址0x100,十六进制值为0x01234567

          

C语言验证代码如下:

#include<stdio.h>
int main(){
int num = 0x01234567;
char *c = (char *)&num;
if(*c == 0x01)printf("big");
else if (*c == 0x67)printf("small");
}

4.3 编译选项

5.表示字符串与代码

① 字符串编码

字符串被编码为以null(值为0)结尾的字符数组,每个字符为ASCII码

例 “123456” = “31 32 33 34 35 36 00 ”

② 表示代码

使用机器语言编码表示,二进制编码互不兼容(不同系统)。

6.布尔代数

Tips:确定是逻辑运算还是按位运算。

7.C语言中的移位运算

符号:<< 与 >> 加数字表示移动的位数

左移:按位左移并在右端补0

右移

① 逻辑右移:按位右移在往左端补0(对无符号整数使用)

② 算数右移:按位右移在往左端补最高位有效值(对有符号整数使用)

8.整数表示

整形数据类型表示有限范围的整数,大小与类型、机器有关(负数范围比正数大1)。

8.1 无符号整数

映射一一对应,没有二义性。

8.2 补码编码(有符号)

8.3 无符号数与有符号数的转换

Tips:2的31次方 - 1 = 2147483647

默认是有符号数,且有符号数优先级较高,无符号数声明在数后加U。

转换:位模式不变,只改变值。

表达式(包括比较)中若同时存在有符号数与无符号数,有符号数隐式转换为无符号数。

Tips:C99(一般)与C90的编码缺省不同,有可能比较结果不同。

9.数位的扩展与截断

9.1 数位扩展

① 无符号数按零扩展

② 有符号数按最高位数扩展

9.2 数位截断

直接删除前k位数,得到的新数按原类型(有无符号)解释。

Tips:加减运算要注意数位的范围,超出范围出现截断(运算的有限性)。

10.整数运算

Tips:数位的范围对运算很重要(溢出问题)!

10.1 无符号整数加法

10.2 有符号整数加法

10.3 整数的乘运算(左移)

高级语言中两个n位数相乘,结果通常也为n位数,即结果只取乘积2n位中的低n位

10.4 乘常数

Tips:整数乘法比移位和加法代价大很多。

10.5 例题

移位代码存在问题

① 申请空间可能出现乘法溢出 导致申请空间不足

② 未释放空间

③ 做移位操作从低位开始可能会覆盖原本高位数据(空间连续且过小时)

④ 使用连续的存储空间存储信息有安全漏洞,可以用预设信息覆盖原信息实现入侵甚至盗取root权限。

10.6 无符号数除2的幂

直接逻辑右移幂位即可。

11.浮点数

Tips:在数轴上比整数更稀疏

11.1 浮点数的表示及转换

Tips:某些浮点数(eg.0.1)在计算机内不能精确表示(eg.3.1f + 2.1f != 5.2f)会丢一些有效位

精确表示的限制

只能精确表示x/2的k次方

② 在w位中只能设置一个二进制点

Tips:有效数位越高,精度越高。

11.2 IEEE表示

11.2.1 数值形式

11.2.2 编码

Tips:偏置值 = exp(无符号) - (2的7/10次方 - 1) 

11.2.3 规格化、非规格化、无穷大、NAN(不同编码的形式)

11.2.4 IEEE例题

① 十六进制转十进制

② 十进制转十六进制

Tips:尾数部分记得省1。

11.3 舍入

最常见的舍入为偶数舍入,有两个原则,一是向最接近的值舍入,再一个是当处在"中间值"时看有效数值是否是偶数,如果是偶数则直接舍去不进位,如果是奇数则进位。

11.4 浮点数加法

阶码对齐,尾数相加,规格化,若超过有效位进行舍入。

Tips:题目假设有效位为三位,使用了偶数对齐舍入。

11.5 浮点数乘法

与加法类似。

11.6 整数与浮点数的转换

数的范围:double > float > int

11.7 浮点数与整数例题

判断下列表达式是否永真

Tips

① 浮点数溢出不会改变符号位

② 2/3 2/3.0与c语言一样

③ 只有int与float转化成double才能完美转换 不出现舍入与溢出。

④ double与float 舍入规则不一样(前者为64位 后者为32位 舍入位数不一样)

12.练习题

书中第二章练习题需做如下:

总结

以上便是《深入理解计算机系统》第二章——信息的表示和处理的核心知识。在第二章中,重点涉及了C语言中的各种运算及概念,整数、浮点数的各种表示与运算。

深入理解计算机系统02——信息的表示与处理相关推荐

  1. 深入理解计算机系统2——信息表示和处理

    现代计算机存储和处理的信息以二值信号表示.这些微不足道的二进制数字,或者称为位(bit),奠定了数字革命的基础. 把位组合在一起,再加上某种解释,即给不同的可能位模式赋予含义,我们就能够表示任何有限集 ...

  2. 《深入理解计算机系统》第2章 信息的表示与处理

    <深入理解计算机系统>第2章 信息的表示与处理 允许任何人转载,仅作为学习交流. 萌新一枚,本着交流学习经验的心态,写了这篇文章.若文章有误,还请各位大佬指正,谢谢(๑•̀ㅂ•́) ✧ 2 ...

  3. 《深入理解计算机系统》课本第七章自学笔记——20135203齐岳

    <深入理解计算机系统>课本自学笔记 第七章 链接 By20135203齐岳 链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 现代 ...

  4. 【送两本】计算机领域神书《深入理解计算机系统》

    作者:Randal E. Bryant,David R. O'Hallaron 来源:华章计算机(hzbook_jsj) 文末送两本<深入理解计算机系统>第三版,包邮. <深入理解计 ...

  5. 如何阅读《深入理解计算机系统》

    作者:Randal E. Bryant,David R. O'Hallaron 来源:华章计算机(hzbook_jsj) <深入理解计算机系统>(简称CS:APP)的主要读者是计算机科学家 ...

  6. 深入理解计算机系统(CSAPP)含lab详解 完结

    文章目录 深入理解计算机操作系统-第一章 1.1 信息就是位 + 上下文 1.2 程序被其他程序翻译成不同的格式 1.3 了解编译系统如何工作是大有益处的 1.4 处理器读并解释储存在内存中的指令 1 ...

  7. 深入理解计算机系统---程序运行过程

    一个简单的C程序从编写到执行输出hello world!其中间经历的是诸多处理过程,而不仅仅是显示黑屏上的几个字符.这个过程透露着计算机系统的运行本质. 个人对该过程进行了一些分析和总结,如果有不对的 ...

  8. 【收藏】CSAPP深入理解计算机系统三万字长文解析

    CSAPP深入理解计算机系统 文章目录 CSAPP深入理解计算机系统 信息 信息存储 字长 字节序 位运算 位运算符 逻辑运算 移位运算 整数 补码规则 表示范围 整数运算 浮点数 编码 规格化数 阶 ...

  9. c语言无符号扩展,深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断...

    开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...

  10. 《深入理解计算机系统-程序结构》读书笔记

    1.计算机系统漫游 计算机系统是由硬件和系统软件组成的,他们共同工作来运行应用程序.在<深入理解计算机系统>一书中将会学到很多实践的技巧.例如:了解编译器是如何实现过程调用的.避免缓冲区溢 ...

最新文章

  1. 字节跳动、阿里等大厂的真实工作体验如何?5 位程序员的自述
  2. 第十六届全国大学生智能汽车竞赛(西部赛区) 竞速组成绩及获奖情况公示
  3. 百度线下赛道报名通知!
  4. 把阿里jar包安装到本地,供pom引用
  5. php打开gd和mysql_PHP怎么开启mysql, gd, curl, mbstring支持?
  6. 高级语言反汇编程序的函数调用过程
  7. 关 于 正 则 表 达 式 的 类 习 题
  8. thinking-in-java(10)内部类
  9. javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify
  10. android activity滑动切换,Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果...
  11. 阅面携手英特尔发布“繁星”系列产品,推动机器视觉迈入AI芯片新纪元
  12. 【数据结构_浙江大学MOOC】第六七八讲 图
  13. 初级程序员软考重难点知识整理(持续更新)
  14. FLTK Fl_File_Chooser的使用
  15. 人工智能产生式系统实验—动物识别系统(txt文件导入数据库)python代码实现以及关系图
  16. 金融计算器 android,TVM金融计算器
  17. 无人驾驶环境感知 | 01 车道线检测网络LanNet原理及实现
  18. 声纹识别开源框架python_GitHub - yeyupiaoling/VoiceprintRecognition-Tensorflow: 使用Tensorflow实现声纹识别,博客地址:...
  19. btcTrade_project
  20. 对三类软件(游戏,系统,工具)的分析与心得(软件工程第一次作业)

热门文章

  1. arcgis地理空间数据库学习记录02-地理数据库迁移
  2. 中国AI公司会议室取名简史
  3. fn键台式计算机在哪,fn键在哪?老司机教你fn键使用方法
  4. 计算机键盘没有fn,电脑上没有FN键怎么打开小键盘
  5. nacl溶解度_氯化钠溶解度
  6. 操作系统 FCFS,SPF,HRRN算法的实现
  7. 【漏洞分析】流行开源电子邮件程序Roundcube v1.2.2命令执行漏洞分析
  8. 计算机桌面任务栏怎样显示输入法,电脑的任务栏上找不到输入法图标怎么办
  9. 记一次springboot应用偶发502错误的排查过程
  10. mysql 查询重复数据并删除