位运算(&、|、^)与逻辑运算(&&、 ||)区别

        刚无意在一篇文章中看到了位运算(&、|)和逻辑运算(&&、||)的介绍,想起了自己薄弱的基础知识,于是百度了几把总结了下。

        首先从概念上区分下,位运算是将运算符两边的数字换算成二进制(例: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。


  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值