您的位置:首页 > 理论基础

深入理解计算机系统--第二章杂记

2016-09-04 09:14 295 查看
https://onedrive.live.com/edit.aspx/Documents/Code?cid=c82886aa1dfe073c&id=documents&wd=target%28%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F.one%7C71829799-7ADF-4303-BFA8-00A1FD7CA928%2F%E7%AC%AC%E4%BA%8C%E7%AB%A0%3A%E4%BF%A1%E6%81%AF%E7%9A%84%E8%A1%A8%E7%A4%BA%E5%92%8C%E5%A4%84%E7%90%86%7CFE457BAE-A32B-456F-B2BB-E9DEB07FDB87%2F%29

onenote:https://d.docs.live.net/c82886aa1dfe073c/Documents/Code/深入理解计算机系统.one#第二章信息的表示和处理§ion-id={71829799-7ADF-4303-BFA8-00A1FD7CA928}&page-id={FE457BAE-A32B-456F-B2BB-E9DEB07FDB87}&end

一. 信息的储存
a. 大多数计算机用 8bit--一个字节(byte) 作为最小寻址单位,而不是每一个位
b. 每台计算机有一个字长(word size)指明 整数 与 指针数据 的标称大小(nominal size). 32位机虚拟地址上线就是4GB.
c. 多字节对象被储存为 连续的字节序列, 对象的地址为所使用字节中的最小地址. 如int x =1; &x = 0x100. 则 x的四个字节储存在 0x100 0x101 0x102 0x103中
d. C语言利用 cast 显示位, 同时可看出 大端机 与 小端机  见P28程序(中文)
e. 利用以上程序还可以得到 符号的ASCII码(命令 man ascii 可得到ASCII字符码表)   strlen(s) 不计算字符串s的末尾的 null
f. 二进制代码是不兼容的,由于底层指令编码不同.
g. 布尔代数  位向量 位运算  逻辑运算  逻辑右移(补0) 算术右移(补最高有效位的值). 一般对有符号数据使用算术右移
二. 整数表示
a. 无符号数编码(binary to unsigned)
B2U_w (x ⃗ )  =  ∑24_(i=0)^(w−1)▒〖x_i 2^i 〗    (即普通的二进制数)
b. 有符号数(补码(two's-complemet)编码)(binary to two's-complemet)
B2T_w (x ⃗ )  =  −x_(w−1) 2^(w−1)+ ∑24_(i=0)^(w−2)▒〖x_i 2^i 〗    (即最高位取负权重)      那么−x到x的转化为  ~x+1
c. 有符号与无符号之间的转换
保持位不变,只是改变了解释的方式.  理解见 习题2.21
考虑比较 -1<0U  会把-1隐式转化为无符号数
d. 位扩展:
无符号位扩展:单纯在开头添0
有符号位扩展:添加最高有效位的副本
(无符号与有符号扩展与 位 扩展的转化顺序的影响:
Short sx = -12345;
Unsigned uy = sx;  //uy = 0xffffcfc7 = 4294954951
即 (unsigned) x = (unsigned)(int)sx  先进行位扩展 再转化为(理解为)无符号数
而不是 (unsigned)(unsigned short) sx
e. 截断: 丢弃高位
三. 整数的运算
a. 正常的二进制加减乘除 然后 溢出位舍去(这部分目前不太关心)
四. 浮点数
V= 〖(−1)〗^s×M×2^E
符号(sign) s
尾数(significand) M为二进制小数
阶码(exponent) E 为对浮点数加权
四种类型:(以s一位,E两位,M两位为例)
尾码字段:中二进制值理解为 0.11 = 0.75(十进制)设其值为f
阶码字段:中二进制值理解为正常的11 = 3(十进制) 设其值为e
令Bias = 2^(k−1)  −1   k为E的位数  这里k=2,Bias=1
规格化的    s   不为00 或 11   f   V =  〖(−1)〗^s×f×(e−Bias)
非规格化的   s   00  f   V =  〖(−1)〗^s×f×(1−Bias)
无穷大 S   11  00  Inf
NaN S   11  不为00    NaN

浮点数加法 没有结合性 即:(3.14 + 1e10) - 1e10 = 0  而 3.14 +(1e10 - 1e10) = 3.14
其他运算也有诸如此类的 反数学的性质  这里不太关心
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机