逆向基础--C++ 运算符 (05)
一.运算符
C++的运算符 包括:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其它运算符。
1.1 算术运算符
包括:+(加) -(减) *(乘) /(除) %(取模) ++(整数值增加1) --(整数值减少 1)
1.2 关系运算符
包括:==(是否相等) !=(是否相等) >(大于) <(小于) >=(大于等于) <=(小于等于)
1.3 逻辑运算符
包括:&&(逻辑与运算符) ||(逻辑或运算符) !(逻辑非运算符)
重点介绍一下逻辑非运算符:用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。
int a = 10; int b = 20; //两边都为true,则条件为 true。输出:true if (a>0 && b>0) { std::cout << "true"; } //两边任意一个为true,则条件为 true。输出:true if (a > 0 || b > 0) { std::cout << "true"; } //里面a <0为false,则条件为true。 输出:true if ( !(a <0)) { std::cout << "true"; }
1.4 位运算符
位运算符作用于位,并逐位执行操作
//按位与(&)操作,两个位都是1时,结果才是1,否则为0 unsigned int a = 60; // 60 = 0011 1100 (二进制) unsigned int b = 13; // 13 = 0000 1101 (二进制) int c = 0; c = a & b; // 12 = 0000 1100 /* 把a和b的二进制值从右往左,按位比较,最右边是a:0与b:1位与比较, 0&1=0,0&0=0,1&1=1,1&1=1 所以C的右四位是1100 a:0 0 1 1 1 1 0 0 b:0 0 0 0 1 1 0 1 c:0 0 0 0 1 1 0 0 所以值是12 */
//按位或(|)运算规则:两个位中只要有一个为1,结果就为1,否则为0。 unsigned int a = 60; // 60 = 0011 1100 (二进制) unsigned int b = 13; // 13 = 0000 1101 (二进制) int c = 0; c = a | b; // 61 = 0011 1101 /* 把a和b的二进制值从右往左,按位比较,最右边是a:0与b:1位与比较, 0&1=1,0&0=0,1&1=1,1&1=1 所以C的右四位是1101 a:0 0 1 1 1 1 0 0 b:0 0 0 0 1 1 0 1 c:0 0 1 1 1 1 0 1 所以值是61 */
//----------------- 一个简单的权限判断示例----------------- [Flags] public enum UserPermissions { None = 0, Read = 1, // 0001 Write = 2, // 0010 Execute = 4, // 0100 Delete = 8 // 1000 } // 设置多个权限, permissions二进制:0011 UserPermissions permissions = UserPermissions.Read | UserPermissions.Write; // 检查权限, (permissions & UserPermissions.Read)==(0011 & 0001)==UserPermissions.Read if ((permissions & UserPermissions.Read) == UserPermissions.Read) { Console.WriteLine("有读取权限"); }
1.5 其它运算符
| 运算符 | 描述 | 示例 |
| sizeof | sizeof 运算符返回变量的大小 |
int b = 10; |
| Condition ? X : Y | 条件运算符如果, Condition 为真 ? 则值为 X : 否则值为 Y |
int a = 10; |
| Cast | 强制转换运算符把一种数据类型转换为另一种数据类型 |
float a = 10.5; |
| & | 指针运算符 & 返回变量的地址。 |
float a = 10.5; |
| * | 指针运算符 * 指向一个变量。 |
int number = 42; // 定义一个整型变量 // *ptr = 20; 修改了number的值 |
浙公网安备 33010602011771号