《深入理解计算机系统》第二章 信息的表示和处理
2.1 信息存储
一个字节占8个位,计算机中最小的可寻址的存储器单位。
机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。
存储器的每个字节都由一个唯一的数字来标识,称为它的地址。
所有这些可能的地址的集合称为虚拟地址空间。
2.1.1 十六进制表示法
十进制和十六进制之间的转换
使用python脚本
#! /usr/local/bin/python3
#Created on Sep 17th,2017
#author walt740
#module:hex_dec
#note:Translation between hexadecimal and decimal numbers on the commandline arguments
import sys
import re
def hex_to_dec(hex_num):
print("{} = {}".format(hex_num,int(hex_num,16)))
def dec_to_hex(dec_num):
print("{} = {}".format(hex(int(dec_num,10)),dec_num))
if __name__ == '__main__':
for i in sys.argv[1:]:
if re.match('^0x.*|^0X.*',i):
hex_to_dec(i)
else:
dec_to_hex(i)
2.1.2 字
一个字长为w位的机器,虚拟地址的范围位0 ~ $2{w-1}$,程序最多访问$2w$个字节。
2.1.3 数据大小
由于计算机位数的不同,会造成在数据类型的存储上,采用的位数略有不同,下表是在32位和64位机器下,C语言当中的数字数据类型需要的位数。
可以看出,对于长整形以及字符指针类型来说,在32位和64位系统下的字节数是不同的。特别的,对于指针类型来说,所有指针类型在32位下都是4位,而在64位下都是8位,这是由虚拟地址空间的地址位数或者说字长所决定的。
参考:
BinBin Learns To Develop