熊猫屁王2最新版
43.93MB · 2025-09-24
作用:用于执行代码的运算
本章我们主要讲解以下几类运算符:
运算符类型 | 作用 |
---|---|
算术运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
作用:用于处理四则运算
算术运算符包括以下符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | -3 | -3 |
+ | 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取余) | 10 % 3 | 1 |
++ | 前置递增 | a=2; b=++a; | a=3; b=3; |
++ | 后置递增 | a=2; b=a++; | a=3; b=2; |
-- | 前置递减 | a=2; b=--a; | a=1; b=1; |
-- | 后置递减 | a=2; b=a--; | a=1; b=2; |
当操作数的类型不同时,C++会进行隐式类型转换以匹配操作数的类型。在进行算术运算时,确保操作数的类型和运算结果的类型是符合预期的,以避免数据丢失或错误的结果。
示例1:加减乘除
int main() {
int a1 = 10;
int b1 = 3;
cout << a1 + b1 << endl;
cout << a1 - b1 << endl;
cout << a1 * b1 << endl;
cout << a1 / b1 << endl; //两个整数相除结果依然是整数
int a2 = 10;
int b2 = 20;
cout << a2 / b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 / b3 << endl; //报错,除数不可以为0
//两个小数可以相除
double d1 = 0.5;
double d2 = 0.25;
cout << d1 / d2 << endl;
return 0;
}
示例2:取模
int main() {
int a1 = 10;
int b1 = 3;
cout << a1 % b1 << endl;
int a2 = 10;
int b2 = 20;
cout << a2 % b2 << endl;
int a3 = 10;
int b3 = 0;
cout << a3 % b3 << endl; //取模运算时,除数也不能为0
//两个小数不可以取模
double d1 = 3.14;
double d2 = 1.1;
//cout << d1 % d2 << endl;
return 0;
}
示例3:递增
int main() {
//后置递增
int a = 10;
a++; //等价于a = a + 1
cout << a << endl; // 11
//前置递增
int b = 10;
++b;
cout << b << endl; // 11
//区别
//前置递增先对变量进行++,再计算表达式
int a2 = 10;
int b2 = ++a2 * 10;
cout << b2 << endl;
//后置递增先计算表达式,后对变量进行++
int a3 = 10;
int b3 = a3++ * 10;
cout << b3 << endl;
return 0;
}
作用:用于将表达式的值赋给变量
赋值运算符包括以下几个符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
= | 赋值 | a=2; b=3; | a=2; b=3; |
+= | 加等于 | a=0; a+=2; | a=2; |
-= | 减等于 | a=5; a-=3; | a=2; |
*= | 乘等于 | a=2; a*=2; | a=4; |
/= | 除等于 | a=4; a/=2; | a=2; |
%= | 模等于 | a=3; a%2; | a=1; |
示例:
#include <iostream>
using namespace std;
int main() {
// =
int a = 10;
a = 100;
cout << "a = " << a << endl;
// +=
a = 10;
a += 2; // a = a + 2;
cout << "a = " << a << endl;
// -=
a = 10;
a -= 2; // a = a - 2
cout << "a = " << a << endl;
// *=
a = 10;
a *= 2; // a = a * 2
cout << "a = " << a << endl;
// /=
a = 10;
a /= 2; // a = a / 2;
cout << "a = " << a << endl;
// %=
a = 10;
a %= 2; // a = a % 2;
cout << "a = " << a << endl;
return 0;
}
作用:用于表达式的比较,并返回一个真值或假值
比较运算符有以下符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | 0 |
!= | 不等于 | 4 != 3 | 1 |
< | 小于 | 4 < 3 | 0 |
> | 大于 | 4 > 3 | 1 |
<= | 小于等于 | 4 <= 3 | 0 |
>= | 大于等于 | 4 >= 1 | 1 |
示例:
#include <iostream>
using namespace std;
//比较运算符
int main() {
int a = 10;
int b = 20;
cout << (a == b) << endl; // 0
cout << (a != b) << endl; // 1
cout << (a > b) << endl; // 0
cout << (a < b) << endl; // 1
cout << (a >= b) << endl; // 0
cout << (a <= b) << endl; // 1
return 0;
}
作用:用于根据表达式的值返回真值或假值
逻辑运算符有以下符号:
运算符 | 描述 | 示例 | 结果 | ||||
---|---|---|---|---|---|---|---|
&& | 逻辑与 | a && b | 如果a和b都为真,则结果为真,否则为假。 | ||||
` | ` | 逻辑或 | `a | b` | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 | ||
! | 逻辑非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
示例1:逻辑非,逻辑非运算符 !:用于取反操作,将真变为假,将假变为真。
int main() {
int a = 10;
cout << !a << endl; // 0
cout << !!a << endl; // 1
return 0;
}
示例2:逻辑与,逻辑与运算符 &&:当两个操作数都为真时,结果为真;否则结果为假。
int main() {
int a = 10;
int b = 10;
cout << (a && b) << endl;// 1
a = 10;
b = 0;
cout << (a && b) << endl;// 0
a = 0;
b = 0;
cout << (a && b) << endl;// 0
return 0;
}
示例3:逻辑或,逻辑或运算符 ||:当两个操作数中至少有一个为真时,结果为真;否则结果为假。
//逻辑运算符 --- 或
int main() {
int a = 10;
int b = 10;
cout << (a || b) << endl;// 1
a = 10;
b = 0;
cout << (a || b) << endl;// 1
a = 0;
b = 0;
cout << (a || b) << endl;// 0
return 0;
}
用于对二进制位进行操作。
运算符 | 描述 | 示例 | ||
---|---|---|---|---|
& | 按位与 | a & b | ||
` | ` | 按位或 | `a | b` |
^ | 按位异或 | a ^ b | ||
~ | 按位取反 | ~a | ||
<< | 左移 | a << b | ||
>> | 右移 | a >> b |
示例
int m = 5, n = 3; // 5: 0101, 3: 0011
cout << "m & n: " << (m & n) << endl; // 1 (0001)
cout << "m | n: " << (m | n) << endl; // 7 (0111)
cout << "m ^ n: " << (m ^ n) << endl; // 6 (0110)
cout << "~m: " << ~m << endl; // -6 (补码表示)
cout << "m << 1: " << (m << 1) << endl; // 10 (1010)
cout << "m >> 1: " << (m >> 1) << endl; // 2 (0010)
运算符的优先级决定了表达式中运算的顺序。优先级高的运算符先执行。以下是常见运算符的优先级(从高到低):
()
(括号)++
、--
(自增、自减)*
、/
、%
(乘法、除法、取模)+
、-
(加法、减法)<<
、>>
(左移、右移)<
、<=
、>
、>=
(关系运算符)==
、!=
(相等性运算符)&
、|
、^
(位运算符)&&
、||
(逻辑运算符)=
、+=
、-=
等(赋值运算符)在 C++ 中,sizeof
是一个运算符,用于获取数据类型或变量所占用的内存大小(以字节为单位)。sizeof
在编译时计算,因此不会影响程序的运行时性能。
sizeof
可以用于以下两种形式:
sizeof(类型)
:获取某种数据类型的大小。sizeof(表达式)
:获取表达式结果类型的大小。sizeof
可以用于计算数组的总大小或数组元素的大小。
#include <iostream>
using namespace std;
int main() {
int arr[5] = {1, 2, 3, 4, 5};
cout << "sizeof(arr): " << sizeof(arr) << " bytes" << endl; // 数组总大小
cout << "sizeof(arr[0]): " << sizeof(arr[0]) << " bytes" << endl; // 单个元素大小
cout << "Number of elements in arr: " << sizeof(arr) / sizeof(arr[0]) << endl; // 数组元素个数
return 0;
}
输出:
sizeof(arr): 20 bytes
sizeof(arr[0]): 4 bytes
Number of elements in arr: 5
sizeof
可以用于计算结构体的大小。注意,结构体的大小可能会受到内存对齐的影响。示例
#include <iostream>
using namespace std;
struct Point {
int x;
int y;
};
struct PackedPoint {
int x;
int y;
} __attribute__((packed)); // 取消内存对齐(仅在某些编译器中有效)
int main() {
cout << "sizeof(Point): " << sizeof(Point) << " bytes" << endl;
cout << "sizeof(PackedPoint): " << sizeof(PackedPoint) << " bytes" << endl;
return 0;
}
输出:
sizeof(Point): 8 bytes
sizeof(PackedPoint): 8 bytes
sizeof
可以用于计算类的大小。类的大小包括成员变量的大小,并可能受到内存对齐和虚函数表(如果有虚函数)的影响。示例
#include <iostream>
using namespace std;
class MyClass {
int a;
double b;
};
class MyClassWithVirtual {
int a;
double b;
virtual void foo() {}
};
int main() {
cout << "sizeof(MyClass): " << sizeof(MyClass) << " bytes" << endl;
cout << "sizeof(MyClassWithVirtual): " << sizeof(MyClassWithVirtual) << " bytes" << endl;
return 0;
}
输出:
sizeof(MyClass): 16 bytes
sizeof(MyClassWithVirtual): 24 bytes
sizeof
用于指针时,返回指针本身的大小,而不是指针指向的对象的大小。示例
#include <iostream>
using namespace std;
int main() {
int* ptr = nullptr;
cout << "sizeof(ptr): " << sizeof(ptr) << " bytes" << endl;
return 0;
}
输出:
sizeof(ptr): 8 bytes
sizeof
用于字符串时,返回字符串数组的大小,而不是字符串的长度。示例
#include <iostream>
using namespace std;
int main() {
char str[] = "Hello";
cout << "sizeof(str): " << sizeof(str) << " bytes" << endl; // 包括 ' '
cout << "strlen(str): " << strlen(str) << " characters" << endl; // 不包括 ' '
return 0;
}
输出:
sizeof(str): 6 bytes
strlen(str): 5 characters
sizeof
不能用于计算动态分配内存的大小,因为它只能计算编译时已知的类型或变量的大小。示例
#include <iostream>
using namespace std;
int main() {
int* arr = new int[10];
cout << "sizeof(arr): " << sizeof(arr) << " bytes" << endl; // 指针大小,不是数组大小
delete[] arr;
return 0;
}
输出:
sizeof(arr): 8 bytes
作用:利用sizeof关键字可以==统计数据类型所占内存大小==
语法: sizeof( 数据类型 / 变量)
示例:
#include <iostream>
using namespace std;
int main() {
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
cout << "int 类型所占内存空间为: " << sizeof(int) << endl;
cout << "long 类型所占内存空间为: " << sizeof(long) << endl;
cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl;
return 0;
}
//short 类型所占内存空间为: 2
//int 类型所占内存空间为: 4
//long 类型所占内存空间为: 8
//long long 类型所占内存空间为: 8