C,C#,C++中&&和||,&和|的联系和区别
本文来自:http://www.cnblogs.com/GT_Andy/archive/2010/03/30/1921805.html
两者计算结果相同(针对各自的运算对象),只是性能上有差别而已。
&&和||:逻辑运算符
&和|:按位运算符
&&是且的意思,a&&b 两者都为真才为真.
||是或的意思,a||b 两者有一为真即真. &,|是位运算符.即对位进行运算,
如00000011 & 00000001=00000001
00000011 | 00000001=00000011
对于(&&,||),运算的对象是逻辑值,也就是True/False
运算结果只有下列四种情况。
True && True = True
True && False = False
False && True = False
False && False = False
True || True = True
True || False = True
False || True = True
False || False = False
对于(&,|),运算的对象是位,也就是1/0
运算结果只有下列四种情况。
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
&&和&对于他们各自的运算对象来说,结果是一样的。
同理,||和|也是一样的。
比如:5&&2 的运算结果,是这样对待的。
首先5,非零,即为True
2,非零,True
True&&True = True
结果即为True。整个的运算过程是需要做变换的。并不是直接使用操作数的二进制直接比较。所以结果是不同的。在比较的时候,True应该会被转成类似11111111这样的二进制的值,False可能会转成00000000。
这里的一样,说的是针对运算对象。
&&的运算对象是True/False 不管你使用的是什么类型的表达式,他首先要转换为True/False中的一个,然后才参与运算。
&的运算对象就是0/1,不需要转换,有多少位直接计算多少位就可以了。
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01
C,C#,C++中&&和||,&和|的联系和区别的更多相关文章
- JDBC中的Statement和PreparedStatement的区别
JDBC中的Statement和PreparedStatement的区别
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- 【前端】js中new和Object.create()的区别
js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...
- SQL Server中Text和varchar(max)数据类型区别
SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与v ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- c++中的引用与指针的区别
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- 表单提交中get和post方式的区别
表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一 ...
- 解析sql语句中left_join、inner_join中的on与where的区别
以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下 table a(id, type):id type ---- ...
随机推荐
- C# 使用枚举获取对应的数组值时
using System; enum Move { walk, run } class Program { static float[] speedAry = { 50.0f, 200.0f }; p ...
- 计划任务中使用NT AUTHORITY\SYSTEM用户和普通管理员用户有什么差别
原文地址:http://www.ynufe.edu.cn/metc/Article/ShowArticle.asp?ArticleID=805 系统管理员会碰到这种问题,为什么在更改系统登录用户pas ...
- [转]Laravel 4之验证
Laravel 4之验证 http://dingjiannan.com/2013/laravel-validation/ 基本验证 使用Validator::make($data, $rules)验证 ...
- MongoDB学习笔记06
在shell中删除一个集合,执行db.test.drop()或者db.runCommand({"drop":"test"}),在MongoDB中命令其实是作为一 ...
- django表单及母板
在之前的埔文中说到了对Model的操作以及对url的路由映射等内容,对应django的mtv框架则是完成了学习,Model与viewer的操作,那么本节主要来唠叨一下template,当Model,v ...
- IBM SPSS Modeler 预测建模基础(一)
1.搜索下载IBM SPSS Modeler 14.1 32位 及 IBM SPSS Modeler 14.1 注册文件(破解布丁): 2.下载train.csv 及 test.csv: train. ...
- 软件设计之UML—UML中的六大关系
http://www.cnblogs.com/hoojo/p/uml_design.html
- 常用网站--前端开发类+网页设计类+平面素材类+flash类
前端开发类 animate CSS 前端开发网 我爱CSS 大家网 W3School jQuery开发技术详解教程视频 jQuery中文社区 jQueryChina 网页设计类 禅意花园 CSS Do ...
- 跨平台渲染框架尝试 - constant buffer的管理
1. Preface Constant buffer是我们在编写shader的时候,打交道最多的一种buffer resource了.constant表明了constant buffer中的数据,在一 ...
- Ecstore 2.0 报表显示空白
INSERT INTO `sdb_ectools_analysis` (`id`, `service`, `interval`, `modify`) VALUES (, ), (, ), (, ); ...