深入理解计算机系统(原书第2版) 9.7分
读书笔记 练习题 2.13
🦉彦

bis (位设置) 和 bic (位清除)指令。两种指令的输入都是一个数据字 x 和一个掩码字 m。它们生成一个结果 z,z 是由根据掩码 m 的位来修改 x 的位得到的。使用 bis 指令,这种修改就是在 m 为 1 的每个位置上,将 z 对应的位设置为 1。使用 bic 指令,这种修改就是在 m 为 1 的每个位置,将 z 对应的设置为 0。 现在只使用 bis 和 bic 这两个函数,而不使用任何其他 C 语言运算,来实现按位 | 和 ^ 运算。

int bis(int x, int m);
int bic(int x, int m);

按照书前面介绍的用集合来表示二进制数的方法,二进制数 b 用集合 B 表示,B 的成员为二进制 b 中 bit 位为1的位置的集合。例如二进制数 0b101101 可以用集合 { 0, 2, 3, 5} 来表示,表明第 0,2,3,5 位(从右往左,从低往高,位置从0开始)上 bit 为 1。 设全集为 S,假设机器字长为 w,那么显然 S={0, 1, 2 ..., w-1},全集 S 表示的二进制数就是 ~0。 对于 bis(x,y) ,设 集合 X 表示数 x,集合 Y 表示数 y,显然 x | y = X ∪ Y x & y = X ∩ Y bis(x, y) = X + Y = X ∪ Y = x | y bic(x, y) = X - Y = X - X ∩ Y = X ∩ ( S - Y ) = x & (~y) x ^ y 异或表示取集合 X 和 集合 Y 中互不相同部分的合集,即 x ^ y = X ∪ Y - X ∩ Y = ( X - X ∩ Y ) ∪ ( Y - X ∩ Y ) = bic(x, y) | bic(y, x) = bis(bic(x, y), bic(y, x))

1
《深入理解计算机系统(原书第2版)》的全部笔记 266篇
豆瓣
免费下载 iOS / Android 版客户端