深入理解计算机系统-信息的表示和处理

一、信息的存储

1、虚拟地址空间
通常情况下,程序将内存视为一个非常大的数组,数组的元素是由一个个的字节组成,每个字节都由一个唯一的数字来表示,我们称为地址(address),这些所有的地址的集合就称为虚拟地址空间(virtual address space)。

2、Byte和bit

1Byte = 8bit
3、字数据大小
字长决定了虚拟地址空间的最大的可以到多少,也就是说,对于一个字长为w 位的机器,虚拟地址的范围是0 到2^w - 1。

近些年,高性能服务器、个人电脑以及智能手机已经完成了从32 位字长到64位字长迁移。不过在一些嵌入式的应用场景中,32 位的机器仍旧占有一席之地。对于32 位的机器,虚拟地址空间最大为4GB,而64 位的机器,虚拟地址空间最大为16EB。
• 在迁移的过程中,大多数64 位的机器做了向后兼容,因此为32 位机器编译的程序也可以运行在64 位机器上。在64 位的机器上,可以通过这条命令编译生成可以在32 位机器上运行的程序。
• linux> gcc -m32 -o hello32 hello.c
• 通过修改编译选项,就可以编译生成在64 位机器上运行的程序。
• linux> gcc -m64 -o hello64 hello.c
4、寻址和字节顺序
C 语言中,支持整数和浮点数多种数据格式,下表列式了不同数据类型在32 位机器与64 位机器上所占字节数的大小。

从这个表中,我们可以看到很多数据类型都是占用了多个字节空间。对于我们需要存储的数据,我们需要搞清楚该数据的地址是什么,以及数据在内存中是如何排布的。
• 例如:一个int 类型的变量x(0x01234567),假设地址位于0x100 处,由于int类型占4 个字节,因此变量x 被存储在地址0x100,0x101,0x102,0x103 的内存处。


由于不同操作系统使用不同的存储分配规则,指针的值是完全不同的。

32 位的机器,使用4 字节的地址,64 位的机器使用8 字节的地址。虽然整型和浮点数都是对数值12345 进行编码,但是它们却有着完全不同的字节模式。

5、表示字符串
C 语言中的字符串被编码为以NULL 字符结尾的字符数组,例如字符串“abcde” ,这个字符串虽然只有5 个字符,但是长度却为6,就是因为结尾字符的存在。

通过以下程序可以得到每个字符在内存中对应的存储信息。

1 #include <stdio.h>
2 typedef unsigned char *byte_pointer;
3 void show_bytes(byte_pointer start , int len){
4 	int i;
5 	for(i = 0; i < len; i++){
6 		printf(%.2x”, start[i]);
7 	}
8 	printf(”\n”);
9 }
10
11 void show_int(int x){
12 	show_bytes ((byte pointer) &x,sizeof (×));
13 }


其中结尾字符的十六进制表示为0x00,使用ASCII 码来表示字符,在任何系统上都会得到相同的结果。因此,文本数据比二进制数据具有更强的平台独立性。
6、布尔运算

C 语言中的一个特性就是支持按位进行布尔运算,确定一个位级表达式结果的最好方法,就是将十六进制扩展成二进制表示,然后按位进行相应的运算,最后再转换回十六进制。

位运算一个常见的用法就是实现掩码运算,通俗点讲,通过位运算可以得到特定的位序列。例如对于操作数0x89ABCDEF,我们想要得到该操作数的最低有效字节的值,可以通过& 0xFF,这样我们就得到了最低有效字节0x0000 00EF。
除了位级运算之外,C 语言还提供了一组逻辑运算,注意逻辑运算的运算符与位级运算容易混淆。逻辑运算认为所有非零的参数都表示true,只有参数0 表示false。

对于if(a && 5/a) 表达式,如果a 等于0,该逻辑运算的结果即为false,不用再去计算5 除以a,这样就可以避免了出现5 除以0 的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值