BIS, BIC位运算与逻辑运算的关系

这两种指令都接受两个参数, 数据字X 掩码字M .

例如 X: 11000011, M: 10101010. 因为M中1, 3, 5, 7位置上为1, 所以将X, 1, 3, 5, 7位置设置为1. 结果为11101011

bic bis 语义相反.

我们现在假设我们使用着 VAX , 正要考虑如何用这两个原语实现逻辑操作 OR , AND , XOR .

bis 是将所有为1的位置, 都强制写为1, 和当前值为0或1没有任何关系.
也就是当n表示一个位置, (Mn=1) bis (Xn=0/1) = 1 得出 1 bis 0 = 1 和 1 bis 1 = 1 . 这和 OR 的特点完全一致.

bis 的 1 bis 0/1 = 1 并不能解释 AND , 当已知一边为1时, AND 的结果仍无法确定. 但我们知道, AND OR 是相反的, OR 是当两边都为0时,结果才为0, 而 AND 是当两边都为1时, 结果全为1.
我们可以得出, 0在 AND 是起绝对作用的. 当一边为0时, 结果一定为0.
那么, 如果构建出 "当一边为0时, 结果一定为0" ?

我们拿一个掩码举例, 例如 10101010 , 它作用的位置是1, 3, 5, 7号位. 因为bis和bic都是通过1的位置来操作数据. 那么如何操作0的位置? 也就是说, 如何让bis和bic操作2, 4, 6, 8这四个位置, 因为这里有我们非常重要的 "0" .
好, 现在说了这么多, 思路可能有点乱, 让我们理清下现有的内容.

bis 会将掩码中 1 所在的位置, 将数据同样位置强制设置为 1 .
bic 会将掩码中 1 所在的位置, 将数据同样位置强制设置为 0 .
and 操作期待将掩码中 0 所在的位置, 将数据同样位置强制设置为 0

那么 bic(X, 0b10101010) 是将1, 3, 5, 7 位置设置为0
而 AND(X, 0b10101010) 理应将2, 4, 6, 8位置设置为0;

那么.....答案显而易见了.

XOR比较容易, 因为存在等式, xor = (a & ~b) | (~a & b)

我们将其替换一下

最终版

我们现在来用C模拟下这两个原语, 因为我们现代的机器不是VAX, 所以仅仅是 模拟 . 其实就是上述的逆操作



扩展阅读:bis认证费用一般要多少钱 ... 美敦力bis传感器 ... bis监测仪器 ... basic language ... bis值麻醉的正常范围 ... biss c ... b照考试视频 ... b证科目一模拟考试 ... 最高级前加most的原则 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网