位运算与逻辑运算

   小白开始学习编程,计算机基础知识很是薄弱,于是打开百度,恶补好多,下面我们讲讲位运算与逻辑运算的区别。

       首先从概念上区分下,位运算是将运算符两边的数字换算成二进制(例:0000010001)后比较相同位置上的0、1进行运算的。逻辑运算即比较运算符两边的逻辑值(true或false)。概念比较抽象,下边借助实际例子比较下。

       位运算

先将每个数转换成二进制,然后进行,位或(|)表示相对应的每位至少有一个为1,则结果为1,只有两个都为0,结果才为0.位与(&)表示相对应的两位必须都为1,结果才为1,否则为0。位异或(^)比较特殊,它比较的是如果两个不同则值为1(如:(1、0)(0、1)),相同(如:(1、1)(0、0))则为0。
例如: 3 |2
11       //二进制的3
10       //二进制的2
--------------------
11       //二进制的3

例如: 3 & 2
11
10
---------------------
10       //二进制的2


例如:  3^2

11

10

---------------------

01       //二进制的1

该例子介绍的是位运算的原理,注意下这里位运算|的结果是3,&的结果是2  这里刚好和比较的数字2、3重复只是个巧合,请不要以为位运算的结果是两个数字中的一个。

       逻辑运算

先将逻辑运算符(&& ||)两边的表达式都换算成逻辑值(true、false),逻辑或(||)表示如果两个值至少有一个为ture,则结果为true,只有两个都为false,结果才为false。逻辑与(&&)表示两个都为true,结果才为true,否则为false。这里比较简单,就不做例子介绍了。


       作用

逻辑运算的作用相信大家都知道,下边来介绍下位运算的作用:

一、按位与 &
1、 清零特定位 (mask中特定位置0,其它位为1,s=s&mask) s=s&mask
2、取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask) s=s&mask
二、按位或 |
常用来将源操作数某些位置1,其它位不变
三、按位异或
1、使特定位的值取反 (mask中特定位置1,其它位为0 s=s^mask)

2、把一个数自清零,如 a=a xor a 不管a是多少,最后a都等于零


为了让大家对位运算的作用更清晰些,下边再举个例子:

按位与运算通常用来对某些位清0或保留某些位。

例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

高八位清0,保留低八位,只要用一个数前边8位为0(&的情况下有一个为0即为0,就意味着清空没值了)后八位为1 (1与原数字(0、1)比较后值还为原数字的值,意味着保留原值)即可成功,那么这个数就是0000000011111111即255。

后面还要继续学习,才能跟上时代,小白加油!


猜你喜欢

转载自blog.csdn.net/jusu10/article/details/78974403