浅谈C++之运算符
一、基本介绍
运算符是描述对数据进行的运算(操作)、体现数据之间运算关系的符号,运算符也叫操作符。
二、运算符分类
-
算术运算符:用于执行基本的数学运算。
+
(加)-
(减)*
(乘)/
(除)%
(取模,求余数)++
(自增)--
(自减)
-
关系运算符:用于比较两个值。
==
(等于)!=
(不等于)>
(大于)<
(小于)>=
(大于等于)<=
(小于等于)
-
逻辑运算符:用于布尔逻辑运算。
&&
(逻辑与)||
(逻辑或)!
(逻辑非)
-
位运算符:对操作数的位进行操作。
&
(位与)|
(位或)^
(位异或)~
(位取反)<<
(左移)>>
(右移)
-
赋值运算符:用于赋值操作。
=
(简单赋值)+=
(加法赋值)-=
(减法赋值)*=
(乘法赋值)/=
(除法赋值)%=
(取模赋值)&=
(位与赋值)|=
(位或赋值)^=
(位异或赋值)<<=
(左移赋值)>>=
(右移赋值)
-
其他运算符:
sizeof
(获取变量或类型的大小)&
(取地址)*
(解引用)new
和delete
(动态内存分配和释放)this
(当前对象的指针).
和->
(成员访问)?:
(条件运算符,三元运算符),
(逗号运算符)
-
特殊运算符:
::
(作用域解析运算符)typeid
(返回变量类型的信息)const_cast
(去除 const 属性)dynamic_cast
(运行时类型检查的向下转型)reinterpret_cast
(低层次的重新解释转换)static_cast
(用于基本的非多态类型转换)
三、运算符示例
算术运算符:
int a = 10;
int b = 5;
int sum = a + b; // 15
int difference = a - b; // 5
int product = a * b; // 50
int quotient = a / b; // 2
int remainder = a % b; // 0
关系运算符:
int x = 10;
int y = 20;
bool equal = (x == y); // false
bool notEqual = (x != y); // true
bool lessThan = (x < y); // true
bool greaterThan = (x > y); // false
bool lessThanOrEqual = (x <= y); // true
bool greaterThanOrEqual = (x >= y); // false
逻辑运算符:
bool isRaining = true;
bool isUmbrella = false;
bool shouldStayIndoor = isRaining && isUmbrella; // false
bool shouldTakeJacket = isRaining || isUmbrella; // true
bool notRaining = !isRaining; // false
位运算符:
int num1 = 12; // 1100
int num2 = 9; // 1001
int andResult = num1 & num2; // 1000 (8)
int orResult = num1 | num2; // 1101 (13)
int xorResult = num1 ^ num2; // 0101 (5)
int notNum1 = ~num1; // -13 (two's complement)
赋值运算符:
int value = 0;
value = 10; // 简单赋值
value += 5; // 加法赋值,value 现在是 15
value -= 3; // 减法赋值,value 现在是 12
value *= 4; // 乘法赋值,value 现在是 48
value /= 2; // 除法赋值,value 现在是 24
value %= 5; // 取模赋值,value 现在是 4
其他运算符:
int size = sizeof(int); // 获取 int 类型的大小
int *ptr = &value; // 取地址
int originalValue = *ptr; // 解引用
int array[5] = {1, 2, 3, 4, 5};
int firstElement = array[0]; // 访问数组的第一个元素
特殊运算符:
class MyClass {
public:
void myMethod() {}
};
MyClass obj;
void (MyClass::*mptr)() = &MyClass::myMethod; // 成员指针
int main() {
MyClass obj;
(obj.*mptr)(); // 通过成员指针调用成员函数
return 0;
}