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

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

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

时间: 2024-10-12 19:58:03

位运算(&、|、^)与逻辑运算(&&、 ||)差别的相关文章

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

刚无意在一篇文章中看到了位运算(&.|)和逻辑运算(&&.||)的介绍,想起了自己薄弱的基础知识,于是百度了几把总结了下. 首先从概念上区分下,位运算是将运算符两边的数字换算成二进制(例:0000010001)后比较相同位置上的0.1进行运算的.逻辑运算即比较运算符两边的逻辑值(true或false).概念比较抽象,下边借助实际例子比较下. 位运算 先将每个数转换成二进制,然后进行,位或(|)表示相对应的每位至少有一个为1,则结果为1,只有两个都为0,结果才为0.位与(&)

Java 位运算(移位、位与、或、异或、非)与逻辑运算

java 位运算包括:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符. 逻辑运算符&.&&.|.||: 一.逻辑&与短路&&的区别 总的来说区别是体现在,只有这两个运算符的左边为false的时候会有区别,看如下代码 1.逻辑&的运算 boolean a = tr

位运算以及逻辑运算

&&和||:逻辑运算符 &和|:按位运算符 &&是且的意思,a&&b 两者都为真才为真. ||是或的意思,a||b 两者有一为真即真. &,|是位运算符.即对位进行运算, 如00000011 & 00000001=00000001 00000011 | 00000001=00000011 对于(&&,||),运算的对象是逻辑值,也就是True/False 运算结果只有下列四种情况. True  && T

位运算和关于两个数交换的多种方法

我们知道,位运算在计算中有着广泛的应用. 在计算机的各种编程语言中位运算也是一种不可缺少的运算,尤其是在计算机的底层实现代码中. 以下我们就来介绍一下位运算. 1.左移运算<<  左移右移都是移动二进制数 0000-0000 0000-0000 0000-0000 0000-1100     =12 向左移动一位变为(右边缺几位就补几个0) 0000-0000 0000-0000 0000-0000 0001 1000       =24 再向左移一位 0000-0000 0000-0000

C言语位运算

所谓位运算,就是对一个比特(Bit)位停止操作.在<二进制思惟以及数据的存储>一节中讲到,比特(Bit)是一个电子元器件,8个比特组成一个字节(Byte),它曾经是粒度最小的可操作单位了.C言语供给了六种位运算符: 运算符 & | ^ ~ << >> 阐明 按位与 按位或 按位异或 取反 左移 右移 按位与运算(&) 一个比特(Bit)位只要 0 和 1 两个取值,只要介入&运算的两个位都为 1 时,后果才为 1,不然为 0.例如1&1为

C#位运算讲解与示例

原文:C#位运算讲解与示例[转] 在C#中可以对整型运算对象按位进行逻辑运算.按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位.C#支持的位逻辑运算符如表2.9所示. 运算符号 意义 运算对象类型 运算结果类型 对象数 实例 ~ 位逻辑非运算 整型,字符型 整型 1 ~a & 位逻辑与运算 2 a & b | 位逻辑或运算 2 a | b ^ 位逻辑异或运算 2 a ^ b <<  位左移运算 2 a<<4 &g

342. Power of Four【位运算】

2017/3/23 22:23:57 Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example:Given num = 16, return true. Given num = 5, return false. Follow up: Could you solve it without loops/recursion? 思路:题目要求不能循环或递归,这里采用位运

Java基本数据类型与位运算

Java基本数据类型与位运算 >>赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明确的,已命名的变量.也就是说,必须有一个物理空间可以存储等号右边的值.分类 基本数据类型 与 类数据类型 的不同1. 对基本数据类型的赋值是很简单的.基本数据存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方.2. 但是在为

嵌入式C语言之位运算 &amp;..|.~.&gt;&gt;

在嵌入式编程中,掌握位运算在操作寄存器的时候很方便,由于之前在上位运算的时候没上,但是由于位运算的难度不是很大,自己编写程序,顺便做些总结. &   |   - 这三个位运算符号不难理解,但是要区别与逻辑运算符号&&  和|| 1.需要总结的是:假如要使寄存器的值为1的话,一般用 这个寄存器的值来| 上1 比如要将i的值变为1则可以使用    i   |=  1;    意思就是将i的值与上1的值再给i.同理要让一个变量的值变成0的话,将使用 &上0     例如   i&