目录
1、16进制表示法
2、数据大小
char(1字节)、short(2字节)、int(4字节)、long(32位:4字节,64位:8字节)、float(4字节)、double(8字节)、指针(32位:4字节,64位:8字节)
3、寻址和字节顺序
(1)以数据的第一个字节为地址
(2)大端法(Sun, PPC Mac, Internet):最高有效字节在前面(低地址)
小端法(x86):最低有效字节在前面(低地址)
(3)双端法:将处理器配置成小端或大端两种的机器运行。
(4)布尔代数运算、位级运算、逻辑运算
(5)移位运算:左移直接移,后面补0;右移分为逻辑右移(对无符号数用,在左端补k个0)、算术右移(对右符号数用,在左端补k个符号位的值)
例题:对32位的数据类型,求1<<2+3<<4?
答案:512。加号优先级大于左移,先2+3得到5,两种符号都是左结合,最终即1<<5<<4。
4、无符号数、补码编码
5、扩展一个数的位表示
无符号数(前面零扩展)、有符号数(前面符号位扩展)
6、截断数字
截掉前面k位数字,可能会导致符号改变。
7、无符号整数加法
如果溢出就丢掉溢出位。
8、有符号整数(补码)加法
和无符号加法有相同的位级的行为。但溢出会分为正溢出(两个正数相加溢出,结果变为负数)、负溢出(两个负数相加溢出,结果变为正数),如果溢出就丢掉溢出位。
9、无符号乘法
10、补码乘法
假设操作数有w位,先将两个操作数进行符号扩展到有2w位,然后像小学一样老老实实列出竖式来算,最后结果截断剩w位。(具体参考补码乘法)
11、乘以常数
12、除以2的幂
x >> k 等价于 x/(2^k),无符号数使用逻辑右移,有符号数使用算术右移
13、二进制小数表示
如二进制数101.11 = 4 + 1 + 1/2 + 1/4
14、浮点数
(1)数值形式:
- 符号位S决定数字是负数还是正数
- 尾数M的范围是 [1.0,2.0)
- 阶码的作用是对浮点数加权
(2)编码:
单精度: 32 位
双精度: 64 位
几种不同的情况:
根据编码得到数值:
实例:
15、浮点数舍入
由于浮点数位数有限,存在一个表示范围和精度的问题。对于数值x,只能用浮点数可以表示的最接近数值x‘来近似表示。这就是舍入。
IEEE规定了四种舍入方式,分别为:向0舍入、向下舍入、向上舍入以及向偶数舍入。
向偶数舍入是默认的方式。
16、浮点加法和乘法
浮点加法:
例:
浮点乘法:
例:
17、整数和浮点数转换规则
(1)int转换为float,不会溢出,可能被舍入;
(2)int或float转换为double,能够准确表示;
(3)double转换为float,可能会溢出+∞或- ∞,也可能会舍入;
(4)float或double转换为int,可能会溢出,如果需要舍入则是向零舍入。
浮点数例题
考虑一种遵从IEEE规范的新浮点格式,包含3个阶码位和3个小数位(即该浮点数不考虑符号位,只用来表示正数)。
1)Bias值为多少?
2)除0和Infinity外,该浮点数能表示的数值范围为多少?
3)尝试填下以下表格的空白处。如果一个数值太大而无法表达,使用infinity的表达式;如果一个数值太小而无法表达,使用0的表达式。
答案:
1)Bias=2^2-1=3
2)
最大的数规格化表示:[110] [111]->E=6-3=3; M=1+0.111=1.111
V_max=1.111*2^(3)=1111 (15)
最小正数非规格化表示:[000] [001]->E=1-3=-2; M=0.001
V_min+=0.001*2^(-2)=0.00001==1/32
所以最终答案为 [1/32, 15]
3)