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

2.1 信息存储

大多数计算机使用8位的,或者字节,作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址。所有可能地址的集合就称为虚拟地址空间

2.1.1 十六进制表示法

10进制0123456789101112131415
2进制0000000100100011010001010110011110001001101010111100110111101111
16进制0123456789ABCDEF

2.2.2 字数据大小

每台计算机都有一个字长,指明指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的大小。也就是说一个字长为ω位的机器而言,虚拟地址的范围为0~ 2 ω − 1 2^{ω}-1 2ω1,程序最多访问 2 ω 2^{ω} 2ω个字节。
目前大多数机器从32位字长迁移到64位。
大多数64位机器也可以运行32位机器编译的程序,这是一种向后兼容。
因此:

  1. 以下指令编译的程序可以在32和64位机器上运行
gcc -m32 hello.c
  1. 以下指令编译的程序智能在64位机器上运行
gcc -m64 hello.c

2.1.3 寻址和字节顺序

对于跨越多字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在内存中如何排列这些字节
排列表示一个对象的字节有两个通用的规则:

  1. 小端法:最低有效字节在最前面
  2. 大端法:最高有效字节在最前面
    对于大多数应用程序员来说,其机器所使用的字节顺序是完全不可见的。无论哪种类型的机器,都会得到相同的结果。不过有时候,字节顺序会成为问题。首先是在不同类型的机器之间通过网络传送二进制数据时,就会发现字里的字节成了反序的

2.1.4 表示字符串

在使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关。因而,文本数据比二进制数据具有更强的平台独立性。
现在又扩展到unicodeutf-8

2.1.5 表示代码

在不同的机器上编译同一段c代码,生成的字节表示的机器代码是不同的。不同的机器类型使用不同的且不兼容的指令和编码方式。即使完全一样的进程,运行在不同的操作系统上也会有不同的编码规则,因此二进制码是不兼容的。二进制代码很少能在 不同机器和操作系统组合之间移植。

2.1.6 布尔代数简介

异或
&|~^

2.1.7 c语言中的位级运算

2.1.8 c语言中的逻辑运算

2.1.9 c语言中的移位运算

2.2 整数表示

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

2.2.1 整型数据类型

char、short、int、long

2.2.2 无符号数的编码

所有的位都用来表示数。
无符号数的取值范围:0~ 2 ω − 1 2^{ω}-1 2ω1

2.2.3 补码编码

可以用来表示负数值。
在这个定义中,将字的最高有效位解释为负权,也称作符号位,即:1表示为负,0表示为非负。
取值范围自行脑补,不太好编辑,就不写了

2.2.4 有符号数和无符号数之间的转换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值