- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
- 运算符优先级
1. 算术运算符
算术运算符,就是,加、减、乘、除、取模(取余)、自增、自减;
int a =1;
int b = ++a; // 该表达式的值为2, 变量a的值也变为2
int a = 1;
int c = a++; // 该表达式的值为1,变量a的值变为2
// ---------------------------------------------------------
int a = 2;
int b = --a; // 该表达式的值为1,变量a的值变为1
int a = 2;
int c = a--; // 该表达式的值为2,变量a的值变为1
2. 关系运算符
关系运算符,就是,比较运算符左右两个操作数的大小关系的运算符!关系运算表达式的值是一个bool值!
3. 位运算符
位运算符,是指,对操作数的二进制的形式,进行相关操作!
左移运算,相当于,进行,乘以2的n次方的操作( n为右操作数 );
右移运算,相当于,进行,除以2的n次方的操作( n为右操作数 );
4. 逻辑运算符
逻辑运算符的操作数,要么值为真,要么值为假!逻辑运算操作包括与、或、非!
4.1 逻辑运算符的操作数,要么为真,要么为假;在C++中,什么是假?
在 C++ 中,逻辑运算符的操作数可以是任何类型,但在进行逻辑运算时,它们会被转换为布尔值(true 或 false)。
以下是一些关于什么被视为“假”的详细说明:
(1)布尔类型
false:布尔类型的值false,本身就是假!
(2)整数类型
0:在C++中,整数值0,被视为假;
非零值:任何非零整数( 如1、-1、42等 ),都被视为真!
(3)指针类型
nullptr:空指针nullptr,被视为假;
非空指针:任何指向有效对象的指针,都被视为真!
(4)自定义数据类型
重载operator bool:如果自定义的数据类型重载了 operator bool,则根据重载的结果来判断真假。
其他情况:如果自定义的数据类型没有重载 operator bool,编译器会将实例对象转换为布尔值,通常会根据对象的内部状态来决定真假。
#include <iostream>
class MyClass {
public:
MyClass(bool value) : value(value) {}
operator bool() const { return value; } // 重载,可转换为布尔值的,操作符 ---> operator bool()
private:
bool value;
};
int main() {
// 布尔类型
bool b = false; // 假
std::cout << std::boolalpha << b << std::endl; // 输出: false
// 整数类型
int zero = 0; // 假
int nonZero = 42; // 真
std::cout << std::boolalpha << (zero != 0) << std::endl; // 输出: false
std::cout << std::boolalpha << (nonZero != 0) << std::endl; // 输出: true
// 指针类型
int* ptr1 = nullptr; // 假
int x = 10;
int* ptr2 = &x; // 真
std::cout << std::boolalpha << (ptr1 != nullptr) << std::endl; // 输出: false
std::cout << std::boolalpha << (ptr2 != nullptr) << std::endl; // 输出: true
// 自定义类型
MyClass objFalse(false);
MyClass objTrue(true);
std::cout << std::boolalpha << (objFalse) << std::endl; // 输出: false
std::cout << std::boolalpha << (objTrue) << std::endl; // 输出: true
return 0;
}
总结:
在 C++ 中,以下值被视为假:
- 布尔值 false
- 整数值 0
- 空指针 nullptr
- 自定义的数据类型,根据其重载的 operator bool() 的返回值
其他所有值(非零整数、非空指针、布尔值 true 等)都被视为真。
理解这些规则,有助于在逻辑运算中,正确使用条件表达式。
5. 赋值运算符
6. 其他运算符
7. 运算符的优先级
可以将运算符的优先级,粗略地记为:
(1)作用域运算符
(2)括号;
(3)其他一元运算符( 包括,非运算! );
(4)算数运算符;
(5)移位运算符;
(6)关系运算符;
(7)位运算符;
(8)逻辑运算符;
(9)三元条件运算符;
(10)赋值运算符;
(11)抛出异常运算符;
(12)逗号运算符;