一运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。 C# 有丰富的内置运算符,分类如下:
1. 算术运算符
下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
例如:
//假如A=21;B=10;
int A = 21,B = 10;
textBox1.Text = "A+B=" + (A + B);
textBox2.Text = "A-B=" + (A - B);
textBox3.Text = "A*B=" + (A * B);
textBox4.Text = "A/B=" + (A / B);
textBox5.Text = "A%B=" + (A % B);
注:
(1)“+”运算符
在算术运算中起到加法的作用
在字符串与其他类型数据之间的使用起到连接字符串作用
//假如A=21;B=10;
int A = 21,B = 10;
textBox1.Text = "A+B=" + A + B;
//假如A=21;B=10;
int A = 21,B = 10;
textBox1.Text = "A+B=" + (A + B);
(2)自加自减运算
假设变量A的值为10
例如:
//假设A=10;B=0;
int A = 10;
int B;
B = A++;
textBox1.Text = "B=" + B + ";A=" + A;
B = ++A;
textBox2.Text = "B=" + B + ";A=" + A;
int a = 10;
int b;
b = a--;
textBox3.Text = "b=" + b + ";a=" + a;
b = --a;
textBox4.Text = "b=" + b + ";a=" + a;
a++ 先赋值后运算;++a先运算后赋值;a- -先赋值后运算;- -a先运算后赋值;
计算机进行运算是按照补码进行运算的
面试案例:
int i=2147483647 i 的补码是:0111 1111 1111 1111 1111 1111 1111 1111
i 的补码+1 是:1000 0000 0000 0000 0000 0000 0000 0000
所以 i+1 得到的结果是-2147483648
(3). 关系运算符
下表显示了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
例如:
int A = 10;
int B = 20;
label3.Text = "(A == B)="+(A == B).ToString();
label4.Text = "(A != B)=" + (A != B).ToString();
label5.Text = "(A > B)=" + (A > B).ToString();
label6.Text = "(A < B)=" + (A < B).ToString();
(4)逻辑运算符
下表显示了C#支持的所有逻辑运算符。假设变量A为布尔值true,变量B为布尔值false,则:
例如:
label1.Text = ((textBox1.Text == "A") && (textBox2.Text == "A")).ToString();
label2.Text = ((textBox1.Text == "A") || (textBox2.Text == "A")).ToString();
label3.Text = (!((textBox1.Text == "A") && (textBox2.Text == "A"))).ToString();
(5).赋值运算符
下表列出了 C# 支持的赋值运算符:
例如:
int a = 10, b = 12, c;
label4.Text = "c=a+b:c=" + (a + b);
label5.Text = "b+=a:b=" + (b += a);
(6)位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
下表列出了C#支持的位运算符。假设变量A的值为60,变量B的值为13,则:
例如:
int a = 60;
int b = 13;
label3.Text = "(a & b)=" + (a & b).ToString();
label4.Text = "(a | b)=" + (a | b).ToString();
label5.Text = "(a ^ b)=" + (a ^ b).ToString();
label6.Text = "(~a)=" + (~a).ToString();
label7.Text = " (a << 2)="+ (a << 2).ToString();
label8.Text = " (a >> 2)="+(a >> 2) .ToString();
(7)注意事项
1.&和&&
(1). &和&&都表示逻辑与(and)的运算符,只有当运算符两边的结果都是true整个运算才为true
(2). &&具有短路功能,如果左边表达式结果为false则右边表达式不再进行运算判断。而&则不然,不论左边表达式结果是true还是false,右边表达式仍然会进行运算判断
2.|和||
(1). |和||都表示逻辑或(or)的运算符,运算符两边的表达式只要有一个是true整个表达式都是true
(2). ||具有短路功能,如果左边的表达式结果为true则右边表达式不再进行运算判断。而|则不然,不论左边表达式结果是true还是false,右边表达式都会进行运算判断
例子:
int a = 60;
int b = 13;
label9.Text ="&"+ ((a++ > 70) & (b++ < 20)).ToString() + "【a=" + a + "】【b=" + b + "】";
a = 60;
b = 13;
label10.Text = "&&"+((a++ > 70) && (b++ < 20)).ToString() + "【a=" + a + "】【b=" + b + "】";
a = 60;
b = 13;
label11.Text = "|"+((a++ > 70) | (b++ < 20)).ToString() + "【a=" + a + "】【b=" + b + "】";
a = 60;
b = 13;
label12.Text = "||"+((b++ < 20)||(a++ > 70)).ToString() + "【a=" + a + "】【b=" + b + "】";
(8)杂项运算符
a. sizeof()返回数据类型(值类型)的大小。sizeof(int),将返回4
b. typeof()返回class的类型。typeof(StreamReader);
c. &返回变量的地址。&a;将得到变量的实际地址。
d. “※”变量的指针。*a;将指向一个变量。
e. ?x:y-条件表达式,如果条件为真?则为x:否则为y
f. is判断对象是否为某一类型。
g. as-if(ford is car);// 检查Ford是否是Car类的一个对象。as强制转换,即使转换失败也不会抛出异常。
string str = "";
label1.Text ="bool类型的大小是:"+ sizeof(bool).ToString();
label2.Text="string类型属于"+typeof(Form)+"类";
label3.Text = "三元表达式进行对a赋值(10,8)比较大的数:a=" + (10 > 8 ? 10 : 8);
(9)三元运算符
运算表达式: Exp1 ? Exp2 : Exp3;
条件运算符 ? :,可以用来替代 if…else语句。它的一般形式如下:
其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
(10)as进行类型转换
object a="123";
label4.Text = "a原本类型是" + a.GetType().Name+ "\r\n" + "a经过as进行强转为string类型" + (a as String).GetType().Name;
//a是object,但是通过给a赋一个string类型的值,然后通过GetType方法得到其最终类型就是string
(11)运算符优先级