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

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

作者: 体胖勤跑步 | 来源:发表于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

相关文章

  • 位运算

    位运算包括逻辑运算和移位运算,相应地,位运算符包括逻辑运算符(包括~、&、|和^)和移位运算符(包括>>、<<和>...

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

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

  • C#二进制移位运算符 "<<"及">>","&","|","^"

    移位运算符 & :按位与,其实与&&逻辑运算符有一致的地方: | :按位或,同样与||有类似的地方。 ~:按位取反...

  • 2020-07-26 Java基础学习004

    内容提前看 String类中的split特殊字符大坑 逻辑运算符,移位 三目运算 InteliJ IDEA快捷键 ...

  • 位运算(1) -- 移位

    位运算是二进制数的各种操作的统称, 本篇是移位操作. 计算机中的位运算操作都是以其补码参与运算 正数的三码(原码/...

  • C#位运算讲解与示例2

    在C#中可以对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个...

  • C语言速成

    1.操作符: 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 位操作运算符:参与运算的量,按...

  • 2018-04-24 JAVA 移位运算符

    移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。有三种移位运算符 (<<,>>,>>>...

  • 1.4.运算符

    按功能分为: 算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 其他运算符 ---------- 逻辑运算...

  • Kotlin 运算符、符号重载总结

    算数运算符 关系运算符 示例 逻辑运算符 位运算符 三目运算 Java Kotlin forEach、in 循环 ...

网友评论

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

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