字长与虚拟地址范围关系
首先要明白“字”的含义:是用来表示一次性处理事务的固定长度。
一个字的位数,即字长
计算机中大多数寄存器的大小是一个字长。计算机处理的典型数值也可能是以字长为单位。CPU和内存之间的数据传送单位也通常是一个字长。还有内存中用于指明一个存储位置的地址也经常是以字长为单位的。
字长决定的是每次同时处理的位数,由数据线决定。
指针变量中存放的是地址值,是一个整数,这个数的最大值受字长限制;
所以一个指针变量所能指向的最大地址范围是由字长决定的,指针的值就是虚拟地址,但虚拟地址范围不等同于寻址空间
;
- 操作系统负责管理虚拟地址空间,并将虚拟地址翻译为物理地址;
右移
算数右移
- 在左端补n个最高有效位;
- 针对有符号数,默认或假设是这样;
逻辑右移
- 在左端补n个0;
- 针对无符号数,必须是这样;
正码、反码和补码
x | [x]正码 | [x]反码 | [x]补码 | [-x]补 |
---|---|---|---|---|
正数 | 普通二进制 | 同正码 | 同正码 | [x]补码各位取反+1,包括符号位 |
负数 | 正码除符号位之外取反 | 反码+1 | [x]补码各位取反+1,包括符号位 |
反码真实值计算公式:w是二进制位数
- 补码加减法:
数据类型
- C语言只指定了每种数据类型的最小范围而不是确定范围;
- 无符号与有符号类型转换规则:数值会变,位不变;