[知识点]C++中的运算符
1、前言
之前最开始学习语法和基础知识的时候,基本上最简单的运算符有所接触,当时对于位运算这种东西完全没有概念。今天对C++中出现的部分运算符尤其是位运算符进行一些总结。
2、+ - * / %
这些貌似不用讲吧?小学生都知道了。
3、&& ||
两大基础逻辑运算符,&&表示“和”,前后连接两个值,形如a && b,当且仅当a==1并且b==1,返回值为1,否则为0;||表示“或”,前后连接两个值,形如a || b,当a==1或者b==1时,返回值为1;否则为0。
4、<< >>
位运算符。形如a << b,表示a在二进制形式下向左移动b位。如:10 << 2 -> [1010](2) << 2 -> [101000](2) -> 40。然而只要你清楚二进制数的意义,并且通过这个样例,很快就可以发现左移一位就相当于乘2,而一般运用得较多的地方也是这里,由于电脑位运算速度较快,所以a=a*2就可以转换为a=a<<1,一来加快速度,二来可以装逼哦。
同理,<<就是相反的含义了,不多解释。
5、& | ^
咋一看和第3项似乎有点像,但是这些都是位运算符,可和第3项也存在一些相通的地方。这些位运算符的共同点是将他们转换为二进制数,然后按位计算,最后返回值。一个个来解释:
① & 和
对于每一位,存在:
1&1=1;1&0=0;0&1=0;0&0=0。
即当且仅当两个数的这一位均为1,返回值为1,否则为0。举一个实例:10&3=[1010](2)&[0011](2)=[0010](2)=2
作为整体时,布尔值返回值在当且仅当每一位返回值均为0时返回0,否则为1。
应用:判断奇偶性的时候,通常会写: if (n%2==0),可写成:if (n&1==0)。
② | 或
对于每一位,存在:
1|1=1;1|0=1;0|1=1;0|0=0。
即两个数的这一位只要有一位为1,返回值为1;否则为0。举一个实例:10|3=[1010](2)|[0011](2)=[1011](2)=11
作为整体时,布尔值返回值在当且仅当每一位返回值均为0时返回0,否则为1。
③^ 异或
对于每一位,存在:
1^1=0;1^0=0;0^1=0;0^0=1。
即两个数的这一位相同时返回1,不同时返回0。举一个实例:10^3=[1010](2)^[0011](2)=[0110](2)=6
作为整体时,布尔值返回值在当且仅当每一位返回值均为0时返回0,否则为1。
应用:这是一个非常强大的位运算符,起码我是这么觉得,因为当我了解到之后都感觉似乎不可能,但是事实证明这是正确的。
<1>更方便地交换两个数的值
-----------------------------------------------------------------------------------------------------
void swap(int &a,int &b) { a^=b; b^=a; a^=b; }
-----------------------------------------------------------------------------------------------------
<2>例题:在一个数列中存在2*n+1个数,其中有n个数出现了两次,一个数出现了一次,请找出那个数。首先容易想到一个算法,作标记,时间复杂度为O(2n)。但是,巧妙地运用^,可以达到O(n),如下代码:
-----------------------------------------------------------------------------------------------------
void find()
{
int ans=0;
for (int i=1;i<=n;i++) ans^=a[i];
printf("%d",ans);
}
-----------------------------------------------------------------------------------------------------
[知识点]C++中的运算符的更多相关文章
- (转)JavaScript中的运算符优先级
JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...
- JavaScript中“typeof”运算符与“instanceof”运算符的差异
在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...
- C++中的运算符重载注意事项
1.C++中的运算符重载的方式有三种: a.类成员函数重载 b.友元函数重载 c.普通函数重载 注意: a.我们主要使用的方式主要是用:类成员函数和友元函数来实现运算符的重载. b.其实用普通函数理论 ...
- JavaScript中的运算符种类及其规则介绍
JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...
- js中的运算符和条件语句
js中的运算符大体上可以分为4类:1算术运算符.2一元操作符.3比较运算符.4逻辑运算符. 算术运算符一般指的是加减乘除求余这五种操作符:+,-,*,/,%.通过算术运算符可以对js中的变量进行操作. ...
- c语言中逗号运算符和逗号表达式
原文:c语言中逗号运算符和逗号表达式 C语言提供一种特殊的运算符——逗号运算符.用它将两个表达式连接起来.如: 3+5,6+8称为逗号表达式,又称为“顺序求值运算符”.逗号表达式的一般形式为 表达式1 ...
- 第一百节,JavaScript表达式中的运算符
JavaScript表达式中的运算符 学习要点: 1.什么是表达式 2.一元运算符 3.算术运算符 4.关系运算符 5.逻辑运算符 6.*位运算符 7.赋值运算符 8.其他运算符 9.运算符优先级 E ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- JS中的运算符和JS中的分支结构
JS中的运算符 1.算术运算(单目运算符) + .-.*. /. %取余.++自增 .--自减 +:两种作用,链接字符串/加法运算.当+两边全为数字时,进行加法运算:当+两边有任意一边为字符串时,起链 ...
随机推荐
- Pyqt QComboBox 省市区县联动效果
在Qt中, QComboBox方法窗口组件允许用户从列表清单中选择,在web中就是select标签,下拉选项. 省市区县的联动就是currentIndexChanged 获取当前的Index,通过这个 ...
- siblings 使用
//$(object).siblings().each(function () { // $(this).find("img").attr("class", & ...
- SQL脚本书写的几点建议
1.索引很关键,创建合理的索引,提升查询速度: DBCC FREEPORCCACHE DBCC DROPCLEANBUFFERS ...
- 在python多进程中使用manager和Barrier
注意:Barrier是PYTHON3才有的功能,在2中无法测试. #!/usr/bin/env python # -*- coding: utf-8 -*- import multiprocessin ...
- DES加密算法实现
好久没写博客了,正好趁着实现网络工程与安全的DES算法的功夫,把代码发上来. DES的介绍可见:DES加密 原理不赘述了..实在太多,其实就是一个形式化算法,按部就班的实现就可以,只不过有些繁琐,我写 ...
- C++ 基础 const放在函数末尾的意思
- Codeforces Round #364 As Fast As Possible
二分思想,对所要花费的时间进行二分,再以模拟的形式进行验证是否可行. 使用二分法,可以将一个求最优解的问题转化为一个判定问题,优雅的暴力. #include<cstdio> #includ ...
- Visual Studio 2015的Web扩展包
过去几年,Visual Studio扩展功能生态系统得到了蓬勃发展,社区贡献出了大量优秀的扩展,其中也包括大量针对Web开发的扩展.但是很多时候,感觉寻找.安装.更新好 几个扩展,总显得比较麻烦.如果 ...
- 攻城狮在路上(壹) Hibernate(十七)--- Hibernate并发处理问题
一.多个事务并发运行时的并发问题: 总结为第一类丢失更新.脏读.虚读.不可重复读.第二类丢失更新. 1.第一类丢失更新: 撤销一个事务时,把其他事务已提交的更新数据覆盖. 2.脏读: 一个事务读到另一 ...
- [SQL]查询及删除重复记录的SQL语句
一:查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ...