深入理解计算机系统笔记二:信息的表示和处理

1 信息存储

  大多数计算机使用8位的块,或者字节,作为最小的可寻址的内存单位,而不是访问内存中的单独的位。

1.1 十六进制表示法

  将二进制每三位化为十六进制表示,十六进制使用‘0-9’以及‘A-F’表示,具体如下:深入理解计算机系统笔记二:信息的表示和处理_第1张图片

1.2 字数据大小

  每台计算机都有一个字长,知名指针数据的标称大小。因为虚拟地址是以这样的一个字来进行编码的,字长决定了虚拟地址空间空间的最大大小。对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w个字节。
  32位字长相纸虚拟地址空间为4千兆字节(4GB)。扩展到64位系统使得虚拟地址空间为16EB,大约是1.84x10^19字节。

1.3 寻址和字节顺序

  某些机器选择爱内存中按照从最低有效字节到最高有效字节的顺序存储对象,称为小端法;另一些机器按照从最高有效字节到最低有效字节的顺序存储对象,称为大端法

1.4 表示字符串

  c语言中字符串被编码为一个以null(值为0)字符结尾的字符数组,每个字符又是由某个标准编码对应的二进制序列表示。

1.5 表示代码

  c语言的二进制代码在各个不同的机器上编译会获得不同的机器代码,因为不同的机器类型使用不同的且不兼容的指令和编码方式。

1.6 布尔代数简介

  将逻辑的真假编码为二进制0、1,来研究逻辑的基本原则。

1.7 C语言中的位级运算

  • | or(或)
  • & and(与)
  • ~ not(非)
  • ^ exclusive-or(异或)
    注:位级运算一个常见的用法就是掩码运算,比如java的hashmap的实现中,hash函数就利用了掩码运算。

1.8 C语言中的逻辑运算

  c语言中提供了一组逻辑运算符:&&、||、!。分别对应逻辑中的AND、OR、NOT。
  &&、||和&、|的一个很大的区别是,前者的第一个参数求值就能确定表达式的结果,那么了逻辑运算符就不会再对第二个参数求值。

1.9 C语言中的移位运算

  • 左移:x<
  • 右移:逻辑右移和算术右移。逻辑右移在左端补k个0,算术右移是在左端补k个最高有效位的值。

2 整数表示

  用位来编码整数的两种不同的方式:一种只能表示非负数,而另一种能表示负数、零和正数。

2.1 整数数据类型

  主要注意,各种类型的整数取值范围不是对称的,负数的范围比正数的范围大1.

2.2 无符号数的编码

  参考二进制和十进制之间的转换。

2.3 补码编码

  补码可以通过求原码的反码,然后加1获得。java中负数的表示是用补码表示。

2.4 有符号数和无符号数之间的进制转换

  实际上进行的强制类型转换转换只是换了解释这些位的方式,实际上位值没有变。这里就需要考虑强制换换后有没有溢出。

后面的内容又臭又长,暂时跳过,以后有兴趣再研究。

你可能感兴趣的:(深入理解计算机系统笔记二:信息的表示和处理)