C++学习笔记5 - 运算符
运算符?加、减、乘、除?
简单的说:C++ 运算符只有:条件运算符、关系运算符、逻辑运算符、数学运算符、位运算符、自增自减运算符、赋值 与 自赋值运算符
我们先看赋值运算符:
#include <iostream> //自赋值运算符 void main() { int a = 1; a += 10;// a = a + 10; a 为 11 a -= 5; // a = a - 5; a 为 6 a *= 3; // a = a * 3; a 为 18 a /= 2; // a = a / 2; a 为 9 a %= 4; // a = a % 4; a 为 1 a &= 10;// a = a & 10; a 为 0 a |= 10;// a = a | 10; a ^= 5;// a = a ^ 5; a <<= 3;// a = a << 3; a >>= 3;// a = a >> 3; system("pause"); }
条件运算符:
#include <iostream> //条件运算符 ? : /* 假设 有表达式 A B C 组成条件表达式 A ? B : C; 条件运算符的嵌套 A ? B : C; B 或者 C 部分 可以再写成 条件表达式 A ? (A?B:C) : C; A ? B : (A?B:C); A ? (A?B:C) : (A?B:C); 其执行顺序为: 1)执行A 判断 A的结果 为真 还是 假 2)如果为真 执行 B语句 A C 等同于没有 只剩下 B; 3) 如果为假 执行 C语句 A B 等同于没有 只剩下 C; 主语 B C 语句 必须是同类型 比如 如果 B 有返回值 是表达式 那么 C 必须一样 如果 B 是无返回值的 代码语句 C 也必须一样 std::cout 就没有返回值 1 + 1 这个表达式 就有返回值 */ void main() { int a, b; a = 10; b = 20; a > b ? std::cout<<"a 大于 b\n" : std::cout<<"a 小于 b\n"; //此处为真 那么 A C 部分 等于没有 //整个语句相当于 int c = a + 10; //所以 是 可以执行的 没有语句错误 int c = a < b ? a + 10 : b - 10; std::cout<<c<<"\n"; system("pause"); }
关系运算符:
#include <iostream> //关系运算符 //关系运算符的结果 是 bool // == != > < >= <= void main() { int a, b; bool c; //相等判断运算符 == A == B; //会判断 == 该符号 左右 两边的结果 是否相等 //如果相等 整个表达式 为 真 否则 为假 a = 1; b = 2; c = (a == b); // a 的 值为1 b 的值 为2 那么 a 和 b 不相等 a == b为假 //不相等 判断运算符 != A != B //判断不相等 只要 A 和 B 不相等 那么 A != B 为真 // A B 相等 A != B 为假 c = (a != b); //a 值为 1 b 值为 2 不相等 所以 a != b 为真 //大于判断运算符 > A > B //a 值为 1 b 值为 2 a 小于 b 所以 a > b 为假 c = (a > b); //小于判断运算符 < A < B //a 值为 1 b 值为 2 a 小于 b 所以 a < b 为真 c = (a < b); //大于等于判断运算符 >= A >= B //只要 满足 大于 或者 等于 其中一个条件 就为真 //a 值为 1 b 值为 2 a 小于 b 所以 a >= b 为假 c = (a >= b); //小于等于判断运算符 <= A <= B //只要 满足 小于 或者 等于 其中一个条件 就为真 //a 值为 1 b 值为 2 a 小于 b 所以 a <= b 为真 c = (a <= b); system("pause"); }
逻辑运算符:
#include <iostream> //逻辑运算符 void main() { //逻辑 与 运算符 && /* 假设有表达式 A、B 组成的逻辑表达式 A&&B 该表达式会返回一个bool 结果 表达式会先 得到 A 的结果 并判断真 假 如果A 为 真 就继续判断 B的 真 假 如果B 为 真 那么整个表达式(A&&B) 返回 真 简单说: A为真 B为真 表达式 为真 A为真 B为假 表达式 为假 A为假 B将不计算 表达式为 假 */ int a; int b; a = 1; b = a-- && a++; std::cout<<a<<" "<<b<<"\n"; a = 1; b = --a && a++; std::cout<<a<<" "<<b<<"\n"; //逻辑 或 运算符 || /* 假设有表达式 A、B 组成的逻辑表达式 A||B 该表达式会返回一个bool 结果 表达式会先 得到 A 的结果 并判断真 假 如果A B 有一个 为真 那么 表达式 返回真 如果A B 都为假 表达式 返回 假 简单说: A为真 B将不计算 表达式 为真 A为假 B为真 表达式 为真 A为假 B为假 表达式 为假 */ a = 1; b = a-- || a++; std::cout<<a<<" "<<b<<"\n"; a = 1; b = --a || a++; std::cout<<a<<" "<<b<<"\n"; //逻辑 非 ! a = 1; b = 0; //此处 a的值是1 为真 //在 a 的前面 加上 ! 那么a为假 //也就是 真变假 假变真 !a; //结果为假 !b; //结果为真 system("pause"); }
数学运算符:
#include <iostream> //加+ 减- 乘* 除/ 取余% void main() { int a = 10; int b = 20; int c = 30; //和原来学习的数学计算方式一样 //先 乘除 后 加减 优先计算括号内的 int d = a + b * c; //除法稍有不同 (因为参与计算的变量类型) //这里10 / 4 的结果 应该是 2.5 //但是 由于 10 是 int 类型的常量 4 也是 int 类型 //的 常量 所以 int / int 结果 也是一个 int //所以 这里 10 / 4的结果是 2 小数部分 不做保留 d = 10 / 4; //取余 整数的除法 我们可以看成两个部分 商 和 余 //比如 15 除以 6 得到的结果就是 2 和 3 //那么 用除号 / 得到的就是 商 2 // 用取余 % 得到的就是 余数3 d = 15 / 6; d = 15 % 6; system("pause"); }
位运算符:
#include <iostream> //位运算符 /* 位运算符的处理 是在二进制位的层面上进行处理的 位的操作是非常快。 */ void main() { int a = 12345; int b = 67891; int c; char d; //按位与 & 二进制位 同为1 则 为1 反之为0 c = a & b; //a 0000 0000 0000 0000 0011 0000 0011 1001 //& //b 0000 0000 0000 0001 0000 1001 0011 1111 //同1为1 反之为0 //c 0000 0000 0000 0000 0000 0000 0011 0001 //按位或 | : 二进制位 同为0则为0 反之为1 c = a | b; //a 0000 0000 0000 0000 0011 0000 0011 1001 //| //b 0000 0000 0000 0001 0000 1001 0011 1111 //同0为0 反之为1 //c 0000 0000 0000 0001 0011 1001 0011 1111 //按位异或 ^ 相同为0 不同为1 c = a ^ b; //a 0000 0000 0000 0000 0011 0000 0011 1001 //| //b 0000 0000 0000 0001 0000 1001 0011 1111 //相同为0 不同为1 //c 0000 0000 0000 0001 0011 1001 0000 0110 int a1 = 100; int a2 = 1122334; int a3 = 5566778; a1 = a1 ^ a2; a1 = a1 ^ a3; a1 = a1 ^ a3; a1 = a1 ^ a2; //反向异或 可以把数据还原 早起用作数据加密 //按位取反:~ 1变0 0变1 ~c; //按位左移: << c = a << 2; //a 0000 0000 0000 0000 0011 0000 0011 1001 //左移两位 最高位会消失 会添加2个 0 到最后位 // 00 - 00 0000 0000 0000 0011 0000 0011 1001 + 00 // 0000 0000 0000 0000 1100 0000 1110 0100 a = 100; c = a << 2; //左移1位相当于 * 2 但是比乘法效率高很多 //按位右移: >> c = a >> 2; //a 0000 0000 0000 0000 0011 0000 0011 1001 //右移两位 最低位会消失 会添加2个 符号位 到最后位 //也就是说 最高位 如果是1 那么添加的就是1 //比如 10001100 最高位是1 右移后就是 11 + 100011 - 00 // 11100011 //如果是 00001100 最高位是0 则添加0即可 //移动后 00000011 c = a >> 2; //右移相当于 除 2 system("pause"); }
自增自减运算符:
#include <iostream> //自增自减 运算符 void main() { //自增运算符 ++ //假设有一个变量 a // ++a 相当于 a = a + 1; //计算过后 a 的值 会增加1 int a = 1; int b; //++a //++ 会先计算 然后 会把a 增加后的结果 返回出去 // b得到的就是 增加后的结果 2 b = ++a; a = 1; //a++ //++在后面 就会 先返回a保存的值 1 b得到的就是 1 //然后 计算++ a 增加 1 b = a++; //自减运算符 -- a = 1; //--a //-- 会先计算 然后 会把a 减少后的结果 返回出去 // b得到的就是 减少后的结果 0 b = --a; a = 1; //a-- //--在后面 就会 先返回a保存的值 1 b得到的就是 1 //然后 计算-- a 减少 1 b = a--; system("pause"); }
觉得不错,给我一点以太币吧
地址:0xF23FCCbF5A4ee9832CC553c63732BAdfc606A2c2