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

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

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

  1. C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

  2. jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算

    JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog  转自 :http://blog.csdn.net/web ...

  3. Java运算符使用总结(重点:自增自减、位运算和逻辑运算)

    Java运算符共包括这几种:算术运算符.比较运算符.位运算符.逻辑运算符.赋值运算符和其他运算符.(该图来自网络) 简单的运算符,就不过多介绍使用了,可自行测试.关于赋值运算,可以结合算术运算和位运算 ...

  4. 数据运算+-*/,比较运算符==!=,赋值运算,逻辑运算and,or,not,成员运算in,not in,身份运算is is not,位运算&|,运算符的优先级

    取模就是返回余数. 取模的作用主要是来取奇偶数来用的,奇数干嘛,偶数干嘛. 比较运算符: 赋值运算: 逻辑运算: 赋值的时候可以多个变量同时赋值 成员运算: in就是在不在的意思. 身份运算: 位运算 ...

  5. golang中算数运算、位运算、逻辑运算、赋值运算常用方法

    package main import "fmt" var a = 21.0 var b = 5.0 //var c float64 func main() { Arithmeti ...

  6. python算数、逻辑运算,位运算

    算术运算符 对变量和数组进行算术运算. 算术运算符:+,-,*,/,% +:将连个或者多个数值相加 -:将两个数值相减 *:将两个数值相乘 /:将两个数值相除 %:取相除的余数 赋值运算符 将右边的值 ...

  7. C#位运算讲解与示例

    首先每一个权限数都是2的N次方数 如:k1=2 ; //添加 k2=4 ; //删除 k3=8; //修改 ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了. 如: p ...

  8. 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算

    布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运 ...

  9. C#位运算讲解与示例2

    在C#中可以对整型运算对象按位进行逻辑运算.按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位.C#支持的位逻辑运算符如表2.9所示. 运算符号 意 ...

随机推荐

  1. 人生之清单(list of life)

    人生要走走停停,想想记记,修修改改,再向前走.国家工程,公平正义,一腔热血,都很容易燃起来,热血起来. 1. 没得选,有得选,怎么办 没得选 原生家庭,自己怎么生,怎样的父母: 遇见谁,会有怎样的对白 ...

  2. Golang 学习笔记 目录总结

    - 基础: 下载安装 声明变量的方法 数据的三种基础类型:bool,数字,string 数据类型:数组和切片 数据类型:Maps 条件判断以及循环 函数 包管理 package 指针 结构体 - 初步 ...

  3. Android-加载大图,照片墙的实现

    照片墙这种功能现在应该算是挺常见了,在很多应用中你都可以经常看到照片墙的身影.它的设计思路其实也非常简单,用一个GridView控件当作“墙”,然后随着GridView的滚动将一张张照片贴在“墙”上, ...

  4. dedecms实现表单提交数据到指定的邮箱

    1.http://blog.csdn.net/webnoties/article/details/17219219 2.http://www.jz96.com/451.html 3.https://m ...

  5. c#中debug和release版本的区别

    1 debug版本称为调试版本,包含各种调试信息,以为开发人员提供强大的应用程序调试能力,其没有做任何优化,速度慢. 2 release版本称为发布版本,不保存调试信息,但是做了各种的优化,体积小,运 ...

  6. 联想 M415 I3-6100 CPU安装系统方法

    问题: 直接用PE GHOST系统后,USB无法使用,导致鼠标.U盘也无法使用 即 无法安装驱动.软件等 方法: 1.按网上方式,安装集成USB3.0的PE系统 2. 直接用PS2鼠标安装

  7. [NOI2008]志愿者招募 网络流 建模

    题目描述申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天 ...

  8. ln---创建链接

    ln命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接.如果要创建符号连接必须使用"-s"选项. 注意:符号链接文件不是一个独立的文件,它的许多属性依 ...

  9. Win10+CUDA9.0+cuDNN7.2 下载 安装 配置

    官方提示Note: CUDA must be installed only after that MSVS2015 had been installed.安装CUDA前须安装VS2015 cuDNN与 ...

  10. 现在有一个函数A和函数B,请你实现B继承A

    现在有一个函数A和函数B,请你实现B继承A // 方式1 function B(){} function A(){} B.prototype = new A(); // 方式2 function A( ...