《深入理解计算机系统》笔记——信息的表示和处理

  1. 信息的存储
  2. 十六进制表示法
  3. 数据大小
  4. 寻址和字节顺序
  5. 数据类型
  6. 字符串的表示
  7. 代码的表示

信息的存储

信息是客观事物的反映,是经过处理加工后得出的数据
数据是客观事物的记录。
计算机内所有的信息均以二进制的形式表示,也就是由值0和值1组成的序列。
大多数计算机使用8的块(字节),来作为最小的可寻址的存储器单位,而不是在存储器中访问单独的位。

("位(bit)“是电子计算机中最小的数据单位,每一位的状态只能是0或1。8个二进制位构成1个"字节(Byte)”)

也就是说,我们访问计算机最小的单位是八个位构成的字节,而不是值0或值1的单个位。
程序会将存储器视为一个非常大的字节数组,称为虚拟存储器(virtual memory)。存储器的每一个字节都由唯一的数字来标识,也就是我们说的地址(address),所有可能地址的集合称为虚拟地址空间(virtual address space)

十六进制表示法

在二进制表示法中,它的值域为 00000000——11111111;
如果用十进制表示就是0——255。
但二进制表示法太冗长,而十进制表示法与位模式的互相转化又比较麻烦对于用来表示计算机的位模式来说都不是很方便。

位模式: 计算机中所有二进制的0、1代码所组成的数字串

这时候 十六进制数产生了,十六进制使用数字‘0’~ ‘9’,以及字符 ‘A’~ 'F’来对应表示‘10’~‘15’。一般是 0x 或者 0X 开头。逢16进1。

比如十进制数 175,我们用十六进制表示为 0xAF。

计算机进行数据处理时,一次存取、加工和传送的数据长度称为(word),一个字通常由一个或多个(一般是字节的整数位)字节构成,字的位数叫做字长(word size),每台计算机都有一个字长,用来指明整数和指针数据的标称大小(nominal size)。

一个或多个字节组成一个

字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制位数,字长总是8的整数倍,PC机的字长为16位(早期),32位,64位。

查看处理器位数方法: 打开命令提示符,然后输入 systeminfo,可以看到处理器的位数是 64 位

数据大小

在这里插入图片描述
在编程时,考虑到系统的移植性,要注意不同位数下的数据类型的字节数差异。

寻址和字节顺序

对于跨越多个字节的程序对象(程序对象指令、数据或者控制信息等)来说,我们需要制定两个规则:

1、这个对象的地址是什么

2、在存储器中如何排列这些字节
而在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。
他们都遵循两个排列规则:
小端法:从最低有效字节到最高有效字节的顺序存储对象(最低有效字节在最前面)

大端法:和小端法相反。
在这里插入图片描述

可以看到,数据的存储是连续的,如"0x100"~“0x103”。

但由于排列字节的方式有两种,那么这就产生问题:当小端法机器产生的数据被发送到大端法机器或者反方向发送的时,接收程序里的字节成了反序。
因此网络应用程序的代码编写必须遵循已建立的字节顺序的规则,以确保发送方和接收方都是遵循统一的网络标准防止数据错误。

数据类型

数据类型的出现是为了把数据分成所需内存大小不同的数据。编程的时候对于不同情况定义不同数据类型,然后编译器需要申请内存(申请内存根据数据类型或大或小)。
那么根据上面的寻址和字节顺序,计算机在解释一个数据类型的值时主要有四个因素:
位排列规则(大端或者小端)、起始位置、数据类型的字节数、数据类型的解释方式。
对于特定的系统,前两种因素都是特定的;
而对于后两种因素(数据类型的字节数、数据类型的解释方式),会改变一个数据类型的值的最终结果,这就是强制类型转换

字符串的表示

在计算机中,对非数值的文字和其他符号进行处理时,要对文字和符号进行数字化,即用二进制编码来表示文字和符号。
常见的西文字符最常用到的编码方案有ASCII编码。

字符 ‘a’ 的 ASCII 码十进制值为 97,在计算机中用二进制表示就是 01100001

代码的表示

程序其实就是一个二进制序列的简单描述,编译器会帮我们将其翻译成对应的机器所认识的二进制序列。

hello.c到hello.i到hello.o的转变
预处理器cpp->编译器ccl->汇编器as、

猜你喜欢

转载自blog.csdn.net/qq_43265890/article/details/83040861