1.将一个十进制的数字x转换为n进制,可以用n反复除x,得到商q和一个余数r,然后用这个r作为最低位数字,反复这个过程直到商为0,则可以得到n进制的表示,其原理为:
x = a0nm + a1nm-1 +···+ amn0
2.每台计算机都有一个字长(word size),指明指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为w位的机器,虚拟地址的范围为0~2w-1
3.小端法:最低有效字节在最前面的方式;大端法:最高有效字节在最前面的方式。如何判断?
#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]); printf("\n"); }
4.左移和右移
左移k位:丢弃最高的k位,并在右端补k个0
右移分为逻辑右移和算数右移:
逻辑右移k位:左端补k个0,抛弃最低的k位
算数右移k位:左端补k个最高有效位的值,抛弃最低的k位
5.整数的表示
无符号编码可以定义为一个映射B2Uw:{0, 1}w → { 0, 1,···, 2w-1 }
补码编码可以定义为一个映射B2Tw:{0, 1}w → { -2w-1,···, 2w-1-1 }
两种编码方式都具有唯一性(双射)
原文:https://www.cnblogs.com/cedriccheng/p/9563073.html