美文网首页
《深入理解计算机系统》阅读笔记三——位运算 逻辑运算 移位运算

《深入理解计算机系统》阅读笔记三——位运算 逻辑运算 移位运算

作者: 体胖勤跑步 | 来源:发表于2016-04-12 20:54 被阅读0次

    位级运算

    二进制位的布尔运算,这里查了网上的一个例子:用位级的异或运算来做两个变量的数值交换:

    int a=3,b=5;

    a=a ^ b;

    b=b ^ a;

    a=a ^b;

    代码执行后:a为5,b为3

    这是为什么呢?异或是如何交换的呢?

    首先,我们看一下异或的原理:

    a = 3 ^ 5;

    3的二进制是0011,5的二进制是0101。异或发现两者的不同之处,所以a最终为0110。

    了解了异或的基本原理后,接下来看上述的代码。

    a=a ^ b;

    这一句使得a被赋值为“数值a”与“数值b”的“差异值”。

    然后:b=b ^ a;

    这一句用异或利用“差异值”来还原a的数值,并赋值给b。此时b等于a先前的数值。

    最后一句:a=a ^ b;

    因为a仍然保存着“差异值”,这一句通过异或使得b的初始值被还原,并赋值给a。

    这样,异或就将a与b的数值“巧妙”地交换了……

    有时候,我们总以为某些事务很神奇。实际上也只是一种自然规律罢了。

    位级运算的常见用法就是实现掩码运算,这里的掩码是一个位模式,表示从一个字中选出的位的集合,通过位运算取得特定的值

    逻辑运算

    逻辑运算也是或、与、非。这个和位运算容易混淆。逻辑运算是表达式返回值的运算,结果只有真和假,按位运算是二进制的位的0和1的运算

    移位运算

    向左或向右移动位模式,二进制数值10010101向左移动4位得到的值是01010000,也就是说向左移动k位,丢弃最高位的k位,并在右端补k个0。右移运算,有两种形式,逻辑右移和算数右移,逻辑右移在左端补k个0,而算数右移在左端补k个最高有效位的值。二进制数值10010101逻辑右移4位得到的值是00001001,算数右移4位得到的是11111001

    相关文章

      网友评论

          本文标题:《深入理解计算机系统》阅读笔记三——位运算 逻辑运算 移位运算

          本文链接:https://www.haomeiwen.com/subject/gjjwlttx.html