C++运算符

一.算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

int a = 20;
int b = 10;
cout<< a + b <<endl; // 30
cout<< a - b <<endl; // 10
cout<< a * b <<endl; // 200
cout<< a / b <<endl; // 2
cout<< a % b <<endl; // 0 --->模运算相当于数学中除法的余数

    注意: 都是二元运算符,使用时必须要有左右两个操作数

                int / int 结果还是int类型,而且向下取整

int a = 3;
int b = 2;
// 在数学中应该是1.5 但是在C++中输出结果为1 会向下取整,即小数点之后全部舍弃掉了
cout<< a / b <<endl;

                做除法和取模时,右操作数不能为0

                两侧操作数类型不一致时,向类型大的提升

cout<< 1 + 0.2 << endl; // +的左侧是int,右侧是double,在加之前int被提升为double
                        // 故:输出1.2

2. 增量运算符 += -= *= %=            (只适用于变量)

int a = 1;
a += 2; // 相当于 a = a + 2
cout << a <<endl; // 输出3
a -= 1; // 相当于 a = a - 1
cout << a <<endl; // 输出2
a *= 3; // 相当于 a = a * 3
cout << a <<endl; // 输出6
a /= 3; // 相当于 a = a / 3
cout << a <<endl; // 输出2
a %= 3; // 相当于 a = a % 2
cout << a <<endl; // 输出2

3. 自增/自减运算符 ++ --

    ++是给变量的值+1,--是给变量的值-1。

int a = 12;
	int b = 0;
	b = a++;//b=12 a=13 先使用,后加一
	b = ++a;//b=14 a=14 先加一,后使用

     // --操作符给操作-1,与++含义类似

注:如果单独使用,【前置++】和【后置++】没有任何区别,都是给变量加一

       只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

      (a+b)++不合法

int main()
{
 int i = 3;
 cout << i++ + i++ + i++ << endl; // 可读性太差
 cout << i << endl;
 return 0;
}
打印9,结束后i的值为6

二. 关系运算符      =表示赋值,==表示相等

关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false 。

int main()
{
 int a = 10;
 int b = 20;
 // 注意:在C++中 = 表示赋值,要与数学中的含义区分
 // 在C++中 == 表示相等
 cout << (a == b) << endl; // 0
 cout << (a != b) << endl; // 1
 cout << (a < b) << endl; // 1
 cout << (a > b) << endl; // 0
 cout << (a <= b) << endl; // 1
 cout << (a >= b) << endl; // 0 
 return 0;
}

注:count<<5<a<15<<endl;    报错

三.逻辑运算符

逻辑运算符主要有三个: && || ! ,运算结果都是 bool类型。

1.逻辑与&&

两个为真才为真

int main()
{
 int a = 1;
 int b = 2;
 cout << (a == 1 && b == 2) << endl;; // 左为真 且 右为真 则结果为真
 cout << (a == 1 && b > 100) << endl; // 左为真 但 右为假 则结果为假
 cout << (a > 100 && b == 2) << endl; // 左为假 但 右为真 则结果为假
 cout << (a > 100 && b > 100) << endl; // 左为假 且 右为假 则结果为假
 return 0;
}

2.逻辑或||

int main()
{
 int a = 1;
 int b = 2;
 cout << (a == 1 || b == 2) << endl; // 左为真 且 右为真 则结果为真
 cout << (a == 1 || b > 100) << endl; // 左为真 但 右为假 则结果也为真
 cout << (a > 100 || b == 2) << endl; // 左为假 但 右为真 则结果也为真
 cout << (a > 100 || b > 100) << endl; // 左为假 且 右为假 则结果为假
 return 0;
}

3.逻辑非!

int main()
{
 int a = 1;
 cout << !(a == 1) << endl; // a == 1 为true,取个非就是false
 cout << !(a != 1) << endl; // a != 1 为false,取个非就是true
 return 0;
}

注:短路求值:对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表                           达式。对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧                           表达式

四.位运算符

位运算符主要有四个: & | ~ ^

   1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.

int main()
{
	int a = 10;       //0000 1010
	int b = 20;       //0001 0100
	int ret = a&b;    //0000 0000
	cout << ret << endl;     //输出0
	return 0;
}

2.按位或|:如果两个二进制位有一个是一, 则结果为 1, 否则结果为 0.

int main()
{
	int a = 10;       //0000 1010
	int b = 20;       //0001 0100
	int ret = a|b;    //0001 1110
	cout << ret << endl;     //输出30
	return 0;
}

3.按位取反~:一变零,零变一

十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f    一个十六进制的数可以用4个比特位表示

int main()
{
	int a = 0x55555555;  // 0x表示16进制        一个十六进制5可以表示为0101
	a = ~a;              //                                    取反为1010
	cout << hex << a << endl;//  hex表示按十六进制输出          十六进制为a
	return 0;//                                             输出为aaaaaaaa
}

4.按位异或^:如果两个二进制位相同, 则结果为 0, 否则结果为 1.

五.移位运算

移位运算符有两个:<<  >> ,都是二元运算符,且都是按照二进制比特位来运算的。

1.左移 <<: 最左侧位不要了, 最右侧补 0.

// << 将高位丢弃,然后在低位补0
	short s = 1024; //  0000 0100 0000 0000
	s = s << 1;     //  0000 1000 0000 0000  给s乘以2=2048

	s = s << 1;   //    0001 0000 0000 0000  给s乘以2 = 4096
	s = s << 1;   //    0010 0000 0000 0000  给s乘以2 = 8192
	s = s << 1;   //    0100 0000 0000 0000  给s乘以2 = 8192*2
	s = s << 1;   //    1000 0000 0000 0000
	s = s << 1;

2.右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

char ch = 0x07;   // 0000 0111
	ch = ch >> 1;     // 0000 0011--->3
	ch = ch >> 1;     // 0000 0001--->1
	ch = ch >> 1;     // 0000 0000--->0

注:1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.

       2. 右移 1 位, 相当于原 数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.

六. 条件运算符

条件运算符也称为三目运算符,语法格式为: 表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;

当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值

int main()
{
	int a = 30;
	int b = 20;

	// 求a和b的最大值
	// 三目表达式来求:
	int ret = a > b ? a : b;
	cout << ret << endl;
	return 0;
}

七.逗号表达式

语法格式:表达式1,表达式2;

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

上一篇:python逆向


下一篇:C [3] 运算符 - 位运算、取反、左右移