《深入理解计算机系统》CSAPP第二章知识点归纳(看完一遍复习专用)

CSAPP第二章知识点归纳(信息的表示和处理)


基本概念

  • 无符号编码基于传统的二进制表示法,表示大于零或者等于零的数字
  • 补码(two’s-complement)编码是表示有符号整数的最常见方式(正负数)
  • 浮点数编码是表示实数的科学计数法的以2为基数的版本(近似表示,不是精确的)
  • 结果太大不能表示就会发生溢出

信息存储

  • 内存的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能的地址的集合就称为虚拟地址空间
  • 在C语言中,十六进制数以 0x0X 开头
  • 进制转换的方法(虽然简单,但有可能忘记,还是摘抄下来!)

在这里插入图片描述

  • 对于一个w位的机器而言,虚拟地址的范围是 0~ 2 w − 1 2^w-1 2w1​​ ,程序最多访问 2 w 2^w 2w字节
  • 下图为32位和64位计算机数据类型的典型的大小

在这里插入图片描述

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

  • 最低有效字节在最前面的方式称为小端法,最高有效字节在最前面的方式叫大端法

在这里插入图片描述

(需要注意的是上图中,是字节的顺序的不同,在单个字节的八个比特中是按顺序的)(简单记忆:按正常顺序,容易读的是大端法)(大端小端指的是单个数据对象的存储方式,而不是其他的所有字节序列,只有数据是有这两种区分的)

  • 打印程序对象的字节表示的代码
#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, size_t len) {
   
    size_t i;
    for (i = 0; i < len; i++)
	printf(" %.2x", start[i]);    //line:data:show_bytes_printf
    printf("\n");
}

void show_int(int x) {
   
    show_bytes((byte_pointer) &x, sizeof(int)); //line:data:show_bytes_amp1
}

void show_float(float x) {
   
    show_bytes((byte_pointer) &x, sizeof(float)); //line:data:show_bytes_amp2
}

void show_pointer(void *x) {
   
    show_bytes((byte_pointer) &x, sizeof(void *)); //line:data:show_bytes_amp3
}

void test_show_bytes(int val) {
   
    int ival = val;
    float fval = (float) ival;
    int *pval = &ival;
    show_int(ival);
    show_float(fval);
    show_pointer(pval);
}

在这里插入图片描述

表示字符串

  • C语言中字符串被编码为一个以null(值为0)字符结尾的字符数组(一般使用的是ASCII标准)
  • Unicode标准的相关知识重点:
    • 使用32位表示字符,占用4个字节
    • 替代编码,常见的只用1个到2个字节,不常用的要多一些的字节
    • UTF-8表示将每个字符编码为1个字节序列,使得ASCII中的和UTF-8中表示一样

布尔代数

在这里插入图片描述

  • C中的位级运算

在这里插入图片描述

  • C中的逻辑运算(与位级运算区别,逻辑运算认为所有非零的参数都是True,而参数0表示False,返回0和1)

在这里插入图片描述

在这里插入图片描述

整数表示

下面这张表还是看看,说不定考试直接用了不知道是什么

在这里插入图片描述

补码编码

  • 补码编码将字的最高有效位解释为负权(下面的Tmin和Tmax为能表示的最大和最小的数)
    B 2 T w ( x ⃗ ) ≐ − x w − 1 2 w − 1 + ∑ i = 0 w − 2 x i 2 i T M i n w ≐ − 2 w − 1 T M a x w ≐ ∑ i = 0 w − 2 2 i = 2 w − 1 − 1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值