大纲 | |||||
---|---|---|---|---|---|
操作符 | 布尔表达式 | 按位操作符 | 控制流语句 | 跳转语句 | 预处理指令 |
算术操作符 |   |   | if | break | #if、#elif、#else、#endif、 |
赋值操作符 |   |   | while | continue | #define和undef |
递增和递减操作符 |   |   | do-while | goto | #pragma |
常量表达式 |   |   | for |   | nowarn:<warn list> |
  |   |   | foreach |   | #line |
  |   |   | switch |   | #region/#endregion |
一元操作符正和负
二元算术操作符
二元操作符要求两个操作数,操作符在左右操作数之间,例如 1-2 1和2是左右操作数 -是操作符
要使用圆括号增加代码的易读性,尤其是在操作符优先级不是让人一目了然的时候。
避免将二进制浮点类型用于相等性条件式。要么判断两个值之差是否在容差范围之内,要么使用decimal类型。
result = count++;和result = ++count的区别在于 第一个是count赋值给了result然后+1第二个则是 count+1之后才赋值给result
if执行之后else if不会再执行
&&的时候左边操作数为false的时候不会计算右边的操作数 而&不论左边是不是false都会执行右边,也就是说&&支持短路求值
条件操作符
c#唯一三元操作符
condition?consequence:alternative
int a = (5>4)?2:3;
//意思是?前面为true时返回第一个操作数2 否则返回3
空接合操作符 ??支持短路求值
expression1??expression2
string fileName = GetFileName();
string fullName = fileName??"default.txt"
//??操作符支持短路求值。如果expression1不为nu11,就返回expression1的值,不对另一个表达式求值。如果expression1求值为nu11,就返回expression2的值
null条件操作符 ?. (c#6.0引入)
null条件操作符在条用方法或属性直线检查操作符是否为空
string[] args;
if(args?.Length ==0)
{
if(args[0]?.ToLower());
}
//如果?前面为空则不会继续执行下去,但是如果像这样使用
string str =args?[3];
//这样可能会数组越界,因为?只是验证不为空,但是args的长度不一定大于3
使用null条件操作符和委托,可以简化判空的操作
按位操作符(用于对值的二进制格式进行处理。)
(这个只是针对二进制转换)对于负数来说,负数通过最左侧的1来 标识,然后把所有含有0的位置加在一起,第二位为0的话就+(-2(第二位对应于正数的2))再将结果-1
左移<<和右移>>
左移所有位向左移指定位数,右边留下的空位由0补充
右移 所有位向右移动指定位数,如果这个数是负数,左侧空位填充1,否则填充0,向右位移时右边位的数会丢去,右移两位则最右边的两位丢弃
按位操作符
大纲 | ||||
---|---|---|---|---|
  | & (AND) | l(OR) | ^ (XOR) | ~ (取反) |
表达 | 12&7 | 12 l 7 | 12^7 | ~1 |
结果 | 4 | 15 | 11 | 11 |
解释 | 11是1,10是0,00是0 | 10是1,11是1,00是0 | 00是0,01是1,11是0 | 对数的二进制1变0,0变1 |
异或不同的是1,相同的为0,也就是11为0,00为0,10为1
xor ^可以用枚举来表示权限操作1表示有权限但枚举值必须是2的次方
更多的^使用可以查看10个老鼠确定1000瓶水哪瓶有毒
for循环外圈的数比内圈的数小会好一丢丢
break跳出循环,continue结束这次循环直接开始下一次循环,goto,switch中跳到另一个语句,不建议使用