上一篇:
C#,入门教程(08)——基本数据类型及使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123906998
算术运算符号包括:四则运算 加+ , 减-, 乘*, 除/与取模%。
// 加法,运算
int va = 1 + 2;
int vb = va + 3;
int vc = va + vb;
// 加法运算,还可以用于将两个或更多字符串(或变量)连接起来
string sa = "Hello";
string sb = "World";
string sc = sa + " " + sb;
// 特殊情况!字符串与数字连接起来(数字自动转为字符串)
string sd = sa + va;
// 减法,运算
int ga = 1 - 2;
int gb = ga - 3;
int gc = ga - gb;
// 乘法,运算
int fa = 1 * 2;
int fb = fa * 3;
int fc = fa * fb;
// 除法,运算
int ka = 300 / 2;
int kb = ka / 30;
int kc = ka / kb;
// 取模计算
int ya = 10 % 3;
// (点到为止)
// 四则运算符号如果被重载,可以用于 矩阵 等高等级数据集合的运算
// 比如下面三个矩阵 mA,mB,mC 的乘法关系;
Matrix mC = mA * mB;
使用禁忌!
(1)乘法,就需要注意结果是否会超过值范围。
特别情况可以先转为 double 计算,最后再归整。
(2)所有的除法语句之前,一定要加上 除0的检查!
int b = F(20);
int c = 100;
// 错误!
int a = c / b;
// 准确!
if ( b != 0)
{
a = c / b;
}
// 如果 d 是浮点数,则应该这样写
double d = G(2.0);
if ( Math.Abs(d) > float.Epsilon )
{
a = c / d;
}
又:
没有运算符重载是 Go 语言的最大败笔,远离了数学,就远离了精华。
没有大括号是 python 语言的最大败笔,远离了代码的可维护性,就远离了可靠性。
计算机的逻辑,只有三种情况:与,或,非。
1、与AND,两个条件均满足;
比如:a >0 AND a<10 用代码表示就是:
(a>0) && (a<10)
2、或or,两个之一满足;
比如:a <0 OR a>10, 用代码表示就是:
(a>0) || (a<10)
3、非not,不满足;
比如: not a>0;用代码表示就是:
!(a>0)
这其实很别扭。建议:能不用 !就不用!
使用禁忌:
再简单的逻辑,也用括号括起来!无论是老手或新人,这个错误经常出现!而且不好找!
// 错误
a>0 && a<10
// 错误,需要两个&
(a>0) & (a<10)
// 正确
(a>0) && (a<10)
这里面还有一个维护性的问题,30年编程老牛给出的一点良心建议。
// 通常写法
// 不好维护,容易出错!
if ( a > 11 && b < 22)
{
;
}
// 稍微好点
if ( (a > 11) && (b < 22))
{
;
}
// 好的写法
if ( a > 11 )
{
if ( b < 22 )
{
;
}
}
== 表示两边表达式运算的结果相等,注意是两个等号!
int a = 10;
int b = 11;
if ( a == b ) dosomething();
if ( a != b ) dosomething();
if ( a > b ) dosomething();
if ( a < b ) dosomething();
if ( a >= b ) dosomething();
if ( a <= b ) dosomething();
// 如果是两个浮点数的 等于
double c;
double d;
// 错误!!!!!!!!!!!!!!!
if ( c == d )
{
;
}
// 正确!!!!!!!!!!!!!!!!
if ( Math.Abs(c-d) <= float.Epsilon )
{
;
}
!= 表示两边表达式运算的结果不相等;
> 表示左边表达式的值大于右边表达式的值;
< 表示左边表达式的值小于右边表达式的值;
>= 表示左边表达式的值大于等于右边表达式的值;
<= 表示左边表达式的值小于等于右边表达式的值;
按位运算是从 C/C++ 继承过来的运算符号。
如果
如果你是
如果你是初学者,可以放弃后面的内容啦;
如果你尚未到达一定的水平,可以先飘过!
按位与。两个运算数都为 1,则整个表达式为 1,否则为 0;也可以对布尔型的值进行比较,相当于“与”运算,但不是短路运算。
按位或。两个运算数都为 0,则整个表达式为 0,否则为 1;也可以对布尔型的值进行比较,相当于“或”运算,但不是短路运算。
按位非。当被运算的值为 1 时,运算结果为 0;当被运算的值为 0 时,运算结果为 1。该操作符不能用于布尔型。对正整数取反,则在原来的数上加 1,然后取负数;对负整数取反,则在原来的数上加 1,然后取绝对值。
按位异或。只有运算的两位不同结果才为 1,否则为 0。
左移。把运算符左边的操作数向左移动运算符右边指定的位数,右边因移动空出的部分 补 0。
有符号右移。把运算符左边的操作数向右移动运算符右边指定的位数。如果是正值,左侧因移动空出的部分补 0;如果是负值,左侧因移动空出的部分补 1。
无符号右移。和 >> 的移动方式一样,只是不管正负,因移动空出的部分都补 0。
你完全不需要学习任何的运算符优先级知识,不要依靠编译器解决运算符优先级问题,务必直接用 ( ) 来确定表达式的层次(优先级)、范围。
// 不好
double a = b + c * d / e - g;
// 好
double a = b + (c * d) / e - g;
可以用多层次的判别代替多个逻辑条件,组合越多,错误越多!
下一篇:
C#,入门教程(10)——常量、变量与命名规则的基础知识https://blog.csdn.net/beijinghorn/article/details/123913570