C#,入门教程(09)——运算符的基础知识

上一篇:

C#,入门教程(08)——基本数据类型及使用的基础知识icon-default.png?t=N7T8https://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 ) 
    {
        ;
    }
}

三、比较运算符

1、等于==

==     表示两边表达式运算的结果相等,注意是两个等号

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 ) 
{
    ;
}

2、不等于!=

!=    表示两边表达式运算的结果不相等;

3、大于>

>    表示左边表达式的值大于右边表达式的值;

4、小于<

<    表示左边表达式的值小于右边表达式的值;

5、大于等于>= 

>=    表示左边表达式的值大于等于右边表达式的值;

6、小于等于<=

<=     表示左边表达式的值小于等于右边表达式的值;
 

四、按位运算

按位运算是从 C/C++ 继承过来的运算符号。

如果

如果你是

如果你是初学者,可以放弃后面的内容啦;

如果你尚未到达一定的水平,可以先飘过!

1、按位与&    

按位与。两个运算数都为 1,则整个表达式为 1,否则为 0;也可以对布尔型的值进行比较,相当于“与”运算,但不是短路运算。


2、按位或|    

按位或。两个运算数都为 0,则整个表达式为 0,否则为 1;也可以对布尔型的值进行比较,相当于“或”运算,但不是短路运算。

3、按位非~    

按位非。当被运算的值为 1 时,运算结果为 0;当被运算的值为 0 时,运算结果为 1。该操作符不能用于布尔型。对正整数取反,则在原来的数上加 1,然后取负数;对负整数取反,则在原来的数上加 1,然后取绝对值。

4、按位异或^    

按位异或。只有运算的两位不同结果才为 1,否则为 0。

5、左移<<    

左移。把运算符左边的操作数向左移动运算符右边指定的位数,右边因移动空出的部分 补 0。

6、有符号右移>>    

有符号右移。把运算符左边的操作数向右移动运算符右边指定的位数。如果是正值,左侧因移动空出的部分补 0;如果是负值,左侧因移动空出的部分补 1。

7、无符号右移>>>     

无符号右移。和 >> 的移动方式一样,只是不管正负,因移动空出的部分都补 0。

五、C#运算符的禁忌与忠告

1、尽可能多的 ()

你完全不需要学习任何的运算符优先级知识,不要依靠编译器解决运算符优先级问题,务必直接用 ( ) 来确定表达式的层次(优先级)、范围。

// 不好
double a = b + c * d / e - g;

// 好
double a = b + (c * d) / e - g;

2、尽量不用多个 && || ! 

可以用多层次的判别代替多个逻辑条件,组合越多,错误越多!

下一篇:

C#,入门教程(10)——常量、变量与命名规则的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/123913570

猜你喜欢

转载自blog.csdn.net/beijinghorn/article/details/123908269