表达式是啥?
表达式就是变量、常量值及运算符的组合
运算符是?
对变量和常量值由作用的符号。
根据操作的变量个数分为一元、二元及三元运算符
运算符 | 类别 | 示例表达式 | 效果 |
+ | 一元 | a = +3; | 正号 |
- | 一元 | a = -3; | 负号 |
++ | 一元 | a = ++b; | a等于(b+1)的值 b的值加1 |
-- | 一元 | a = --b; | a等于(b-1)的值 b的值减1 |
++ | 一元 | a = b++; | a等于b的值 b的值加1 |
-- | 一元 | a = b--; | a等于b的值 b的值减1 |
! | 一元 | a = !b; | a等于b否定的值 |
~ | 一元 | a = ~b; | 取反 a等于b的二进制取反后的值 |
+ | 二元 | a = b + c; | 加法 注意超出类型范围 |
- | 二元 | a = b- c; | 减法 注意是否有符号 |
* | 二元 | a = b * c; | 乘法 注意超出类型范围 |
/ | 二元 | a = b / c; | 除法 注意结果为浮点数 |
% | 二元 | a = b % c; | 取余 获取余数 |
= | 二元 | a = 3; | 赋值号 |
+= | 二元 | a += 3; | 等效于a = a + 3; |
-= | 二元 | a -= 3; | 等效于a = a - 3; |
*= | 二元 | a *= 3; | 等效于a = a * 3; |
/= | 二元 | a /= 3; | 等效于a = a / 3; |
%= | 二元 | a %= 3; | 等效于a = a % 3; |
== | 二元 | a = b == c; | 等于号 判定符号两边是否相等 |
!= | 二元 | a = b != c; | 不等号 判定符号两边是否不相等 |
< | 二元 | a = b != c; | 小于号 判定符号左边是否小于右边 |
> | 二元 | a = b != c; | 大于号 判定符号左边是否大于右边 |
<= | 二元 | a = b != c; | 小于等于号 判定符号左边是否小于相等右边 |
>= | 二元 | a = b != c; | 大于等于号 判定符号左边是否大于相等右边 |
& | 二元 | a = b & c; | 与 当符号两边都为true时 结果为真 |
| | 二元 | a = b | c; | 或 当符号两边一侧为true时 结果为真 |
^ | 二元 | a = b ^ c; | 异或 当符号两边真假不同时 结果为真 |
&& | 二元 | a = b && c; | 简洁与 当符号左侧为假时 不计算右侧 结果为假 |
|| | 二元 | a = b || c; | 简洁或 当符号左侧为真时 不计算右侧 结果为真 |
&= | 二元 | a &= b; | 等效于 a = a & b; |
|= | 二元 | a |= b; | 等效于 a = a | b; |
^= | 二元 | a ^= b; | 等效于 a = a ^ b; |
& | 二元 | a = b & c; | 位运算与 b与c的二进制相同位置上的数同时为1 该位置上的数结果为1 |
| | 二元 | a = b | c; | 位运算或 b与c的二进制相同位置上的数有一个为1 该位置上的数结果为1 |
? : | 三元 | a = true? b : c; | 当?前为真时 冒号前b赋值给a 当?前为假时 冒号后c赋值给a |
感觉太多了 具体由啥用?
我们按功能对运算符进行划分
算术运算符(用来计算的符号)
int i = +3; // 正号 i的值为3
int j = -3; // 负号 j的值为-3
int k = i+j; // 加法 k的值为0
k = i - j; // 减法 k的值为6
k = i * j; // 乘法 k的值为-9
k = i / j; // 除法 k的值为-1
k = i % j; // 取余 k的值为0
k = i++; // 自增运算符 i当前值不变 语句结束后加一 k的值为3 i在该语句结束后值为4
k = ++i; // 自增运算符 i当前值加一 k的值为5 i在该语句结束后值为5
k = j--; // 自减运算符 j当前值不变 语句结束后减一 k的值为-3 j在该语句结束后值为-4
k = --j; // 自减运算符 j当前值减一 k的值为-5 j在该语句结束后值为-5
*加号(+)当+的一端为字符串时,可将两端以字符串为结果相连接
int s = 5;
Console.WriteLine("s = " + s);
关系运算符
bool c = 3 > 6; // 大于号 符号两边的值是否满足左侧大于右侧的关系 此结果为错
c = 3 < 6; // 小于号 符号两边的值是否满足左侧小于右侧的关系 此结果为对
c = 3 == 6; // 符号两边的值是否满足左侧等于右侧的关系 此结果为错
c = 3 != 6; // 符号两边的值是否满足左侧不等于右侧的关系 此结果为对
c = 3 >= 6; // 符号两边的值是否满足左侧大于等于右侧的关系 此结果为错
c = 3 <= 6; // 符号两边的值是否满足左侧小于等于右侧的关系 此结果为对
逻辑运算符
bool a = true & false; // 与 符号两边都为真时 结果为真 此结果为假
a = true | false; // 或 符号两边由一侧为真时 结果为真 此结果为真
a = true ^ false; // 异或 符号两边真假不同时 结果为真 此结果为真
int i = 5;
a = false && ((i++)>2);
// 简洁与 在与的基础上 当左侧为假时 后面不进行计算 结果为假 语句结束后i的值为5
a = true || (i-- < 5);
// 简洁或 在或的基础上 当左侧为真时 后面不进行计算 结果为真 语句结束后i的值为5
位运算符
int num1 = 5; // num1的值位5
int num2 = 7; // num2的值位7
int num = num1 & num2;
// 与 两个数二进制对应数位上有0该二进制数位的值为0 其余该二进制数位的值为1 num的值为5
num = num1 | num2;
// 或 两个数二进制对应数位上有1该二进制数位的值为1 其余该二进制数位的值为0 num的值为7
num = num1 ^ num2;
// 与 两个数二进制对应数位上值相同时该二进制数位的值为0 其余该二进制数位的值为1 num的值为2
num = ~num1;
// 取反 该数字的二进制0变1 1变0 num的值为-6
int a = 6; // a的值为6
int b = a << 3; // 左移 a的二进制值向左移动三个数位 右边最低位补0 b的值为48
b = a >> 2; // 右移 a的二进制值向右移动两个数位 a为正数 左边最高位正数补0 b的值为1
a = -6;
b = a >> 2; // 右移 a的二进制值向右移动两个数位 a为负数 左边最高位正数补1 b的值为-2
复合赋值运算符
int i = 3; // 赋值号 将符号右边的值给到左边的变量 i的值为3
i += 2; // 等同于 i = i + 2; i的值为5
i -= 3; // 等同于 i = i - 3; i的值为2
i *= 4; // 等同于 i = i * 4; i的值为8
i /= 2; // 等同于 i = i / 2; i的值为4
i %= 3; // 等同于 i = i % 3; i的值为1
*任何二元运算符都可以和赋值号进行复合作为复合赋值运算符使用
条件运算符
int a = true ? 5 : 7;
// 条件运算符 当?前是对的将:前面的值赋值给a 否则将:后面的值赋值给a
运算符的优先级与结合性
含义 | 运算符 | 操作数 | 结合性 |
单目 | ++,--,!,~ | 单目 | 👈 |
算术 | *,/,% | 双目 | 👉 |
+,- | |||
移位 | <<,>> | 双目 | 👉 |
关系 | >,>=,<,<= | 双目 | 👉 |
==,!= | |||
逻辑 | &&,& | 双目 | 👉 |
||,| | |||
条件 | ? : | 三目 | 👈 |
赋值 | =,+=,-=,*=,/=,%= | 双目 | 👈 |
*上面表格中运算符的优先级从上往下递减