运算符

运算符概述

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。

C++ 内置了丰富的运算符,并提供了以下类型的运算符:

  • 算术运算符 +-*
  • 关系运算符 > <
  • 逻辑运算符 && ||
  • 位运算符 & |
  • 赋值运算符 = +=
  • 杂项运算符

算术运算符

下表显示了 C++ 支持的算术运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

#include <iostream>
using namespace std;
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   c = a + b;
   cout << "1 - c 的值是 " << c << endl ;
   c = a - b;
   cout << "2 - c 的值是 " << c << endl ;
   c = a * b;
   cout << "3 - c 的值是 " << c << endl ;
   c = a / b;
   cout << "4 - c 的值是 " << c << endl ;
   c = a % b;
   cout << "5 - c 的值是 " << c << endl ;
 
   int d = 10;   //  测试自增、自减
   c = d++;
   cout << "6 - c 的值是 " << c << endl ;
 
   d = 10;    // 重新赋值
   c = d--;
   cout << "7 - c 的值是 " << c << endl ;
   return 0;
}Code language: PHP (php)
#include <iostream>
using namespace std;
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   c = a / b; //21 两个整数相除 结果只取整数部分 比如2.1 就是2
   cout << c;
  
   return 0;
}Code language: PHP (php)

关系运算符

下表显示了 C++ 支持的关系运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

#include <iostream>
using namespace std;
 
int main()
{
   int a = 10;
   int b = 20;
   bool result = a == b; //如果a等于b 则输出true(非0) 否则输出false (0)
   cout << result <<endl; //0
   
   bool r2 = a != b;
   cout << r2 <<endl; //1
   
   bool r3 = a < b;
   cout << r3 <<endl; //1
   
   bool r4 = a > b;
   cout << r4 <<endl; //0
   
   bool r5 = a >= b;
   cout << r5 <<endl; //0
   
   bool r6 = a <= b;
   cout << r6 <<endl; //1
   
   return 0;
}Code language: PHP (php)

逻辑运算符

假设变量 A 的值为 1,变量 B 的值为 0,则:

#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;
}Code language: PHP (php)
逻辑与运算

逻辑与 并且的意思 类似我们的串联电路

只有两个开关同时关闭 我们的灯泡才亮

逻辑与也是这样的概念 如果同时都是真 那么最后结果才是真 如果有其中一个是假 那么结果就是假

相当于我们日常中的并且的概念

只要大于80岁 并且是本地户口的人 可以获得1000元 春节红包。

逻辑或运算

类似我们的并联电路

只要a 或者b 其中一个闭合 那么灯泡就会亮

如果两个都闭合 那么也会亮

只有一种情况 当两个开关都关闭 那么灯泡才不亮

这就是或者的概念

只有两个条件 有一个是满足的 那么 结果就是真。

如果大于80岁 或者是本地户口的人 都可以获得年底分红。

逻辑非

就是取反

原来是真 取反 结果就是假

如果原来是假 结果就是真

取反符号是用! 感叹号

比如

#include <iostream>
using namespace std;
 
int main()
{
   int a = 1;//真 
   int b = 0;//假
   
   bool r = a > b;
   cout <<  r  << endl; // 1
   cout <<  !r << endl; // 0
     
   return 0;
}Code language: PHP (php)

位运算符

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

A<<2 = 11 110000

A>>2 = 000011 11

下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

#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;
}Code language: PHP (php)

赋值运算符

赋值运算就是把右边的值 付给左边的变量。最简单的就是= 等号。

#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;
}Code language: PHP (php)

看我们的例子

#include <iostream>
using namespace std;
 
int main()
{
   int a = 60;
   float f = 1.2f;
   int b = a + 100;
   a = a+1;//a递增1后 再赋值回去 可以简写成下面的写法
   cout << a << endl;//61
   a+=1; 
   cout << a << endl;//62
   
   int c = 10;
   c =  c -1;
   c -=1;
   
   int d = 10;
   d *= 3; // d =  d * 3;
   cout << d << endl;//30
   
   return 0;
}Code language: PHP (php)

sizeof 运算符

sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。

sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。

使用 sizeof 的语法如下:

sizeof (data type)

#include <iostream>
using namespace std;
 
int main()
{
   cout << "Size of char : " << sizeof(char) << endl;
   cout << "Size of int : " << sizeof(int) << endl;
   cout << "Size of short int : " << sizeof(short int) << endl;
   cout << "Size of long int : " << sizeof(long int) << endl;
   cout << "Size of float : " << sizeof(float) << endl;
   cout << "Size of double : " << sizeof(double) << endl;
   cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
   return 0;
}Code language: PHP (php)

条件运算符 ? :

Exp1 ? Exp2 : Exp3;

其中,Exp1、Exp2 和 Exp3 是表达式

Exp1为真 则取 Exp2的结果 否则 为假则取Exp3 的值

Exp2 和 Exp3的结果类型需要一样。并且最后整个表达式的类型也是和Exp2 和 Exp3的类型一样。

被称为三元运算符,因为它需要三个操作数,可以用来代替如下所示的 if-else 语句:

if(condition){

var = X;

}else{

var = Y;

}

例如,请看下面这段代码:

if(y < 10){

var = 30;

}else{

var = 40;

}

等同于

var = (y < 10) ? 30 : 40;

在这里,如果 y 小于 10,则 var 被赋值为 30,如果 y 不小于 10,则 var 被赋值为 40。

#include <iostream>
using namespace std;
 
int main ()
{
   // 局部变量声明
   int x, y = 10;
 
   x = (y < 10) ? 30 : 40;
 
   cout << "value of x: " << x << endl;
 
   return 0;
}Code language: PHP (php)

我们的例子

#include <iostream>
using namespace std;

int main()
{
	int a = 20;
	int res = 0;
	if (a>10)
	{
		res = 1;
	}
	else
	{
		res = 2;
	}
	cout << res;
	return 0;
}Code language: PHP (php)
#include <iostream>
using namespace std;

int main()
{
	int a = 20;
	int res = 0;
	res = a > 10 ? 1 : 2;
	cout << res;
	return 0;
}Code language: PHP (php)

逗号运算符

使用逗号运算符是为了把几个表达式放在一起。

整个逗号表达式的值为系列中最后一个表达式的值。

从本质上讲,逗号的作用是将一系列运算按顺序执行。

表达式1, 表达式2

求解过程是:先求解表达式 1,再求解表达式 2。整个逗号表达式的值是表达式 2 的值。

最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃。

#include <iostream>
using namespace std;
 
int main()
{
   int i, j;
   
   j = 10;
   i = (j++, j+100, 999+j);
 
   cout << i;
   
   return 0;
}Code language: PHP (php)

我们的例子

#include <iostream>
using namespace std;

int main()
{
	int a = 20;
	int res = (1 + 2, 45 - 5, a + 12,a+a,a++,a++,111-a);
	cout << res;//89
	return 0;
}Code language: PHP (php)

成员访问运算符

.(点)运算符和 ->(箭头)运算符用于引用类、结构和共用体的成员。

点运算符应用于实际的对象。

箭头运算符与一个指向对象的指针一起使用。

例如,假设有下面的结构体:

struct Employee {

char first_name[16];

int age;

} emp;

(.)点运算符

strcpy(emp.first_name, “zara”);

(->)箭头运算符

-> 称为箭头运算符,它是由一个减号加上一个大于号组成。

如果 p_emp 是一个指针,指向类型为 Employee 的对象,则要把值 “zara” 赋给对象 emp 的 first_name 成员,需要编写如下代码:

strcpy(p_emp->first_name, “zara”);

强制转换运算符

强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。

强制转换运算符是一元运算符,它的优先级与其他一元运算符相同。

大多数的 C++ 编译器都支持大部分通用的强制转换运算符:

(type) expression

代码

#include <iostream>
using namespace std;
 
int main()
{
   double a = 21.09399;
   float b = 10.20;
   int c ;
 
   c = (int) a;
   cout << "Line 1 - Value of (int)a is :" << c << endl ;
   
   c = (int) b;
   cout << "Line 2 - Value of (int)b is  :" << c << endl ;
   
   return 0;
}Code language: PHP (php)

我们的例子

#include <iostream>
using namespace std;

int main()
{
	double a = 23.21245;
	int i = (int)a;
	cout << i;

	float f = 12.33;
	int c = (int)(f+a);
	return 0;
}Code language: PHP (php)

自增和自减运算符

自增运算符 ++ 会把操作数加 1,自减运算符 — 会把操作数减 1。因此:

x = x+1;

等同于

x++;

x = x-1;

等同于

x–;

无论是自增运算符还是自减运算符,都可以放在操作数的前面(前缀)或后面(后缀)。例如:

x = x+1;

可以写成:

++x; // 前缀形式

或者:

x++; // 后缀形式

前缀形式与后缀形式之间有一点不同。

如果使用前缀形式,则会在表达式计算之前完成自增或自减,

如果使用后缀形式,则会在表达式计算之后完成自增或自减。

#include <iostream>
using namespace std;
 
int main()
{
   int a = 21;
   int c ;
 
   // a 的值在赋值之前不会自增
   c = a++;   
   cout << "Line 1 - Value of a++ is :" << c << endl ;
 
   // 表达式计算之后,a 的值增加 1
   cout << "Line 2 - Value of a is :" << a << endl ;
 
   // a 的值在赋值之前自增
   c = ++a;  
   cout << "Line 3 - Value of ++a is  :" << c << endl ;
   return 0;
}Code language: PHP (php)

我们的代码

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
	int x = 12;
	//cout << ++x << endl; //++前 则先把x的值+1后 然后再进行下一步的操作 这里的下一步就是cout输出
	cout << x++ << endl; //++后 就是先输出x 则12 然后再让x+1 变成13
	cout << x;

	return 0;
}Code language: PHP (php)

指针运算符

C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。

指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是”指向”另一个变量。

变量可以是任意的数据类型,包括对象、结构或者指针。

取地址运算符 &

& 是一元运算符,返回操作数的内存地址。例如,如果 var 是一个整型变量,则 &var 是它的地址。

该运算符与其他一元运算符具有相同的优先级,在运算时它是从右向左顺序进行的。

您可以把 & 运算符读作”取地址运算符”,这意味着,&var 读作”var 的地址”。

int main()
{
	int x = 12;
	
	cout << &x; //如果想要获取一个变量的地址 则只需要在变量前面使用&

	return 0;
}Code language: JavaScript (javascript)
间接寻址运算符 *

第二个运算符是间接寻址运算符 ,它是 & 运算符的补充。 是一元运算符,返回操作数所指定地址的变量的值。

请看下面的实例,理解这两种运算符的用法。

#include <iostream>
 
using namespace std;
 
int main ()
{
   int  var;
   int  *ptr;
   int  val;

   var = 3000;

   // 获取 var 的地址
   ptr = &var;

   // 获取 ptr 的值
   val = *ptr;
   cout << "Value of var :" << var << endl;
   cout << "Value of ptr :" << ptr << endl;
   cout << "Value of val :" << val << endl;

   return 0;
}Code language: PHP (php)

当上面的代码被编译和执行时,它会产生下列结果:

Value of var :3000

Value of ptr :0xbff64494

Value of val :3000

我们的代码

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
	int x = 12;
	cout << &x << endl; //如果想要获取一个变量的地址 则只需要在变量前面使用&

	int *z = &x;//Z就是指针变量 它是存放另外一个变量的地址 x的地址 就是&x 星号不能去掉
	            //这里的指针是z 不是*z
	cout << x << endl;//直接输出x的值 12
	cout << z << endl;//输出的是x的地址
	cout << *z << endl;//*z就是通过z里面的变量地址 找到那块变量 读取里面的值 12
	
	//double *z = &x; //语法错误 变量的地址 只能存放在相同类型的指针
	return 0;
}Code language: PHP (php)
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
	int x = 12;
	int b = 1;
	//&是取地址符 是用来获取一个变量的内存地址
	cout << b << endl;//输出b的值
	cout << &b << endl;//输出的是b的内存地址
	cout << &x << endl;//输出的是x的内存地址

	//int c = &x; //内存地址 不能存放在普通变量上面
	//要想存储内存地址 需要使用指针 指针也是一个变量 不过它的定义 要在变量名前面+*号
	int *c = &x; //c是一个指针变量 它存储的是x的内存地址
	cout << c << endl;//输出指针的值 也就是x的地址

	//如果我想输出x的值呢?
	cout << x << endl;
	// 如果想输出x的值 可以直接使用x 其实还有另外一种方法
	cout << c << endl; //这样写是输出x的地址
	cout << *c << endl;//*c就是获取指针c里面的内存地址的那个变量的值
	//这里就是通过c里面的地址 找到这个地址的变量 然读取这个变量的值
	return 0;
}Code language: PHP (php)

运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。

例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3 * 2,然后再加上 7。

cout << 1 + 4 * 6 << endl;//如果先计算加法 则结果是1+4=5 然后5 * 6=30

//上面结果是25 因为根据符号的优先级 应该是先算乘法 再加法 4 * 6 = 24 然后24+1=25

下表将按运算符优先级从高到低列出各个运算符

int b = 12;
cout << 2 * 43 - 45 * 45 / (5 - 3) + --b << endl;
#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;
}Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注