用来执行特定的数字或逻辑操作,C++主要提供的运算符如下:

  • 算数运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

算数运算符:

主要运算符:+(加)、-(减) 、*(乘) 、/(除) 、%(除余) 、++(自加) 、--(自减)

/和%运算符详解:

  1. 若两个操作数是正数,则除法的结果是正数。
  2. 求模的结果也是正数若两个操作数是负数,则除法的结果是正数。
  3. 求模的结果是负数若只有一个操作数是负数,则除法和求模的结果取决于机器。
  4. 除法可以确定结果是负数逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数。
  5. 只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数区分 如:if(i<j<k) 和 if(i<j && j<k),第一个i<j或者为0或者为1,只要k大于1,表达式就为true;第二个必须i<j且j<k表达式才为true区分。if(val) 和 if(val == true),第一个只要val非零则表达式为true,val为0则表达式为false;第二个只有val为1表达式为true,val非1则表达式为false。
int val = 2;
if(val==true){ //if内的语句不会被执行。
cout<<"val==true"<<endl;
}

--运算符详解:

-- 、++运算符可以在一次计算中进行叠加,如:----a就是在运行这个表达式时对a连续自减两次,再继续向下运行。

实例:

#include <iostream>
using namespace std; int main()
{
int a = 21;
int b = 10;
int c; c = a + b;
cout << "Line 1 - c 的值是 " << c << endl ;
c = a - b;
cout << "Line 2 - c 的值是 " << c << endl ;
c = a * b;
cout << "Line 3 - c 的值是 " << c << endl ;
c = a / b;
cout << "Line 4 - c 的值是 " << c << endl ;
c = a % b;
cout << "Line 5 - c 的值是 " << c << endl ; int d = 10; // 测试自增、自减
c = d++;
cout << "Line 6 - c 的值是 " << c << endl ; d = 10; // 重新赋值
c = d--;
cout << "Line 7 - c 的值是 " << c << endl ;
return 0;
}

产生结果如下:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10

关系运算符

主要运算符:== 、!= 、> 、< 、>= 、<=(后面两个注意顺序不要写反了)

实例:

#include <iostream>
using namespace std; int main()
{
int a = 21;
int b = 10;
int c ; if( a == b )
{
cout << "Line 1 - a 等于 b" << endl ;
}
else
{
cout << "Line 1 - a 不等于 b" << endl ;
}
if ( a < b )
{
cout << "Line 2 - a 小于 b" << endl ;
}
else
{
cout << "Line 2 - a 不小于 b" << endl ;
}
if ( a > b )
{
cout << "Line 3 - a 大于 b" << endl ;
}
else
{
cout << "Line 3 - a 不大于 b" << endl ;
}
/* 改变 a 和 b 的值 */
a = 5;
b = 20;
if ( a <= b )
{
cout << "Line 4 - a 小于或等于 b" << endl ;
}
if ( b >= a )
{
cout << "Line 5 - b 大于或等于 a" << endl ;
}
return 0;
}

产生结果如下:

Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a

逻辑运算符(不是0,就是真,反之则为假)

主要运算符:&& 、|| 、!

&&运算符详解:

先判断左值是否为假,若为假则直接得到整个表达式的值为假,&&运算符右侧的表达式将不再被执行。反之,则继续执行表达式,计算最终结果。

可以使用该特性将右侧的表达式视为一个if语句的条件,判断右侧表达式是否为真。

||运算符详解:

先判断左值是否为真,若为真则直接得到整个表达式的值为假,||运算符右侧的表达式将不再被执行。反之,则继续执行表达式,计算最终结果。

实例:

#include <iostream>
using namespace std; int main()
{
int a = 5;
int b = 20;
int c ; if ( a && b )
{
cout << "Line 1 - 条件为真"<< endl ;
}
if ( a || b )
{
cout << "Line 2 - 条件为真"<< endl ;
}
/* 改变 a 和 b 的值 */
a = 0;
b = 10;
if ( a && b )
{
cout << "Line 3 - 条件为真"<< endl ;
}
else
{
cout << "Line 4 - 条件不为真"<< endl ;
}
if ( !(a && b) )
{
cout << "Line 5 - 条件为真"<< endl ;
}
return 0;
}

产生结果如下:

Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真

位运算符(无论多少进制先转化为二进制再计算!!)

主要运算符:& 、! 、| 、>>(右移) 、<<(左移) 、^ (异或) 、~ (取反)

>>与<<运算符详解:

  1. <<和>>可以将头部的数字舍掉,并且将由于移动而产生的空位补上0。
  2. 是否舍去头部的数字与变量的二进制位数有关。
  3. 二进制位数可以满足的情况下,左移n位相当于原数×2的n次幂。

&运算符详解:

    00001011
& 00000011
= 00000011 = 3

|运算符详解:

    00001011
| 00000011
= 00001011 = 11

^运算符详解:

  1. ^运算两个数相同为结果为0,反之则为1。
  2. 任何数异或0得到的值不变。
a ^ 0 = a

任何数异或同一个数两次得到的数不变

a ^ b ^ b = a

实例:

#include <iostream>
using namespace std; int main()
{
unsigned int a = 60; // 60 = 0011 1100
unsigned int b = 13; // 13 = 0000 1101
int c = 0; c = a & b; // 12 = 0000 1100
cout << "Line 1 - c 的值是 " << c << endl ; c = a | b; // 61 = 0011 1101
cout << "Line 2 - c 的值是 " << c << endl ; c = a ^ b; // 49 = 0011 0001
cout << "Line 3 - c 的值是 " << c << endl ; c = ~a; // -61 = 1100 0011
cout << "Line 4 - c 的值是 " << c << endl ; c = a << 2; // 240 = 1111 0000
cout << "Line 5 - c 的值是 " << c << endl ; c = a >> 2; // 15 = 0000 1111
cout << "Line 6 - c 的值是 " << c << endl ; return 0;
}

产生结果如下:

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

赋值运算符

主要运算符:= 、+= 、-= 、*= 、/= 、%= 、<<= 、>>= 、&= 、^= 、|=

赋值运算符详解:

多个赋值运算符连续赋值时,各对象必须具有相同的数据类型,或者具有可转换为同一类型的数据类型。

int ival; int *pval;
ival = pval = 0; //error 尽管ival和pval都可以赋值为0
string s1,s2;
s1 = s2 = "OK"

实例:

#include <iostream>
using namespace std; int main()
{
int a = 21;
int c ; c = a;
cout << "Line 1 - = 运算符实例,c 的值 = : " <<c<< endl ; c += a;
cout << "Line 2 - += 运算符实例,c 的值 = : " <<c<< endl ; c -= a;
cout << "Line 3 - -= 运算符实例,c 的值 = : " <<c<< endl ; c *= a;
cout << "Line 4 - *= 运算符实例,c 的值 = : " <<c<< endl ; c /= a;
cout << "Line 5 - /= 运算符实例,c 的值 = : " <<c<< endl ; c = 200;
c %= a;
cout << "Line 6 - %= 运算符实例,c 的值 = : " <<c<< endl ; c <<= 2;
cout << "Line 7 - <<= 运算符实例,c 的值 = : " <<c<< endl ; c >>= 2;
cout << "Line 8 - >>= 运算符实例,c 的值 = : " <<c<< endl ; c &= 2;
cout << "Line 9 - &= 运算符实例,c 的值 = : " <<c<< endl ; c ^= 2;
cout << "Line 10 - ^= 运算符实例,c 的值 = : " <<c<< endl ; c |= 2;
cout << "Line 11 - |= 运算符实例,c 的值 = : " <<c<< endl ; return 0;
}

产生结果如下:

Line 1 - =  运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2

杂项运算符:

主要运算符:

运算符 描述
sizeof sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
Condition ? X : Y 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。
.(点)和 ->(箭头) 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
& 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。
* 指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。
Cast 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2

运算优先级(这一部分极其重要!!)

下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。

类别 运算符 结合性
后缀 () [] -> . ++ - - 从左到右
一元 + - ! ~ ++ - - (type)* & sizeof 从右到左
乘除 * / % 从左到右
加减 + - 从左到右
移位 << >> 从左到右
关系 < <= > >= 从左到右
相等 == != 从左到右
位与 AND & 从左到右
位异或 XOR ^ 从左到右
位或 OR 从左到右
逻辑与 AND && 从左到右
逻辑或 OR 从左到右
条件 ?: 从右到左
赋值 = += -= *= /= %=>>= <<= &= ^= 从右到左
逗号 , 从左到右

实例:

#include <iostream>
using namespace std; int main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5
cout << "(a + b) * c / d 的值是 " << e << endl ; e = ((a + b) * c) / d; // (30 * 15 ) / 5
cout << "((a + b) * c) / d 的值是 " << e << endl ; e = (a + b) * (c / d); // (30) * (15/5)
cout << "(a + b) * (c / d) 的值是 " << e << endl ; e = a + (b * c) / d; // 20 + (150/5)
cout << "a + (b * c) / d 的值是 " << e << endl ; return 0;
}

产生结果如下:

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50

(主要来自菜鸟教程,融入了其他教程以及自己的理解)

C++学习笔记 之 运算符的更多相关文章

  1. C++学习笔记之运算符重载

    一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...

  2. Java学习笔记四——运算符

    算术运算符 加减乘除(+.-.*./)就不说了. 求余运算符% 描述:第一个操作数除以第二个操作数,得到一个整除的结果后剩下的值就是余数 注意:求余预算的结果不一定总是整数,当操作数是浮点数时,结果可 ...

  3. python学习笔记之运算符

    目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的博文介绍了Python的数据结构之后,接 ...

  4. Python学习笔记之运算符之一

    算数运算符 +加法运算符 -减法运算符 *乘法运算符 /除法运算符 //整除运算符 **乘积运算符(幂运算符) %取模运算符(取余) #!/usr/bin/python # -*- coding: U ...

  5. 【原】Java学习笔记004 - 运算符

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 运算符:对常量 或 ...

  6. (C/C++学习笔记) 四. 运算符

    四. 运算符 运算符优先级和结合性 Operator precedence and associativity (or fixity) 注意: ① 成员运算符MemberOperators可以称为点运 ...

  7. MySQL 5.6学习笔记(运算符)

    MySQL运算符包括四类:算术运算符.比较运算符.逻辑运算符和位运算符. 1. 算术运算符 用于种类数值运算.包括:加(+).减(-).乘(*).除(/).取余(%). 除法除数为零时,执行结果为nu ...

  8. Shell 学习笔记之运算符

    基本运算符 算术运算符 val = expr 2 + 2 需要注意的是 表达式和运算符之间需要有空格(比如2 + 2,不能是2+2) 两边最外面的字符是`,在esc键下面,不是引号哦 乘号* 前面必须 ...

  9. Linux学习笔记 - Shell 运算符篇

    Shell 运算符分类 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 算数运算符 首先,使用 shell 算数运算符是,需要 ...

  10. python_ 学习笔记(运算符)

    python的运算符基本和C语言一致,以下说一些不一样的! 算术运算符 **:代表乘方,对应也有**=: //:代表商向下取整,对应也有//=: 逻辑运算符 and or not 位运算符 :& ...

随机推荐

  1. express的路由规则

    路由规则 express 封装了多种 http 请求方式,我们主要只使用 get 和 post 两种. get 和 post 的第一个参数都为请求的路径,第二个参数为处理请求的回调函数,回调函数有两个 ...

  2. INCORRECT PERMISSIONS ON /USR/LIB/PO1KIT-AGENT-HELPER-1(NEEDS TO BE SETUID ROOT)

    INCORRECT PERMISSIONS ON /USR/LIB/PO1KIT-AGENT-HELPER-1(NEEDS TO BE SETUID ROOT) # sudo chmod +s /us ...

  3. C# 元组、匿名对象、ref&out

    元组 private (int number,int newNumber) CaculateByTuple(int number) { return (number: number, newNumbe ...

  4. 【C++】int转string,double转string方法,string转int,string转double方法

    C++的格式比较多比较复杂,转换起来有很多方法,我这里只提供一种,仅供参考. int或double转string 使用字符串流的方式可以比较简单的完成转换 需要添加头文件 #include <s ...

  5. XF相对布局

    using System; using Xamarin.Forms; using Xamarin.Forms.Xaml; [assembly: XamlCompilation (XamlCompila ...

  6. WPF DataGrid自定义列DataGridTextColumn.ElementStyle和DataGridTemplateColumn.CellTemplate

    <Window x:Class="DataGridExam.MainWindow"        xmlns="http://schemas.microsoft.c ...

  7. 【msdn wpf forum翻译】TextBox中文本 中对齐 的方法

    原文:[msdn wpf forum翻译]TextBox中文本 中对齐 的方法 原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/threa ...

  8. explicit:C++规定,当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换

    explicit研究   explicit是C++中的关键字,不是C语言中的.英文直译是“明确的”.“显式的”意思.出现这个关键字的原因,是在C++中有这样规定的基础上:当定义了只有一个参数的构造函数 ...

  9. Expression Blend学习二UI布局

    什么是布局? · Panels控件(其实就是容器控件) · 对内部的子控件提供了自动布局功能 · 可以在容器控件内继续添加容器控件(一个复杂的界面往往是多种容器控件嵌套而组成的) · 一些界面器控件也 ...

  10. iOS 监听控件某个属性的改变observeValueForKeyPath

    创建一个测试的UIButton #import "ViewController.h" @interface ViewController () @property(nonatomi ...