c# 运算符、表达式和数据类型转换

550 阅读7分钟

运算符、表达式和数据类型转换

一、表达式

表达式:表达式是指由操作数和运算符组成的用于完成某种运算功能的语句。

例如:

y = x*(z+100)

上述就是一个表达式。

二、运算符

(1)算数运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。

表格中的实例假设整数变量A的值为10,变量B的值为20:

操作符描述例子
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数B / A等于2
取余 - 左操作数除以右操作数的余数B%A等于0
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

其中+运算符,除了数学运算,还可以进行数据的拼接,例如:

int a = 10;
string b = "10";
Console.WriteLine(a+b);  //此处不进行数学运算,进行拼接,结果将打印1010

两个相同的数据类型进行运算,结果一定还是这个数据类型,所以两个数相除没有小数部分,例如:

int a = 5;
int b = 2;
Console.WriteLine(a/b);   //将打印结果2

不同的数据类型运算,结果为范围大的数据类型

double a = 5;
int b = 2;
Console.WriteLine(a/b);   //将打印结果2.5

自增++运算符和自减--运算符,符号写在前面和后面的区别如下:

++在前,先自增,在运算; ++在后,先运算,在自增 (--运算符同理)

int a = 10;
++a;                    //或者a++,执行结果一样
Console.WriteLine(a);  //打印11
int a = 10;
int b = a++;
Console.WriteLine(a);   //打印结果11
Console.WriteLine(b);   //打印结果10
int a = 10;
int b = ++a;
Console.WriteLine(a);   //打印结果11
Console.WriteLine(b);   //打印结果11

(2)赋值运算符

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
%=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A

例如:

int a = 1;   //正确
// =赋值运算符左边只能是变量,不能是数据常量。
1 = a;  //错误
a + 1 = 2;  //错误
int a = 10;
int b = 5;
a += b;   // 等价  a = a + b;
Console.WriteLine(a);   //打印15
Console.WriteLine(b);   //打印5

(3)关系运算符

表格中的实例整数变量A的值为10,变量B的值为20:

运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)为假。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B) 为真。
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)为假。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A <B)为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B)为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真。

=与==的区别:

int a = 10;
int b = 10;
Console.WriteLine(a = b);  //=代表赋值,把b的值赋给a,然后打印a的值10
Console.WriteLine(a == b); //==代表比较两者是否相等,打印true.

(4)逻辑运算符

下表列出了逻辑运算符的基本运算,假设布尔变量A为true,变量B为false

操作符描述例子
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。

例如:

int a = 20;
int b = 500;
Console.WriteLine(a > b && a > 0);   //打印false
Console.WriteLine(a > b || a > 0);    //打印true
Console.WriteLine(!(a > b || a > 0));  //打印false

(5)三目运算符

该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

条件表达式 ?结果1 :结果2 (表达式成立,执行结果1,否则执行结果2),例如:

int a = 10;
int b = 20;
int c = a > b ? a : b;
Console.WriteLine(c);   //此处打印20

三、数据类型转换

在C#语言中,不同类型的数据在进行混合运算时需要进行类型转换,即将不同类型的数据转换为同种类型的数据后再进行计算,针对于值类型的数据,类型转换主要包括隐式转换和显式转换两种形式。

  • 隐式转换:系统默认的、无须显式声明即可进行的转换。
  • 显式转换:要求一定要将某一类型的数据转换为另外一种类型,则可以使用强制类型转换运算符进行转换,这种强制转换的过程称为显式转换。

(1)隐式转换举例

//将int类型自动转换成long类型
int a = 10;
long b = a;
//将int类型自动转换成double类型
int a = 10;
double b = a;        

隐式转换是从低精度、小范围的数据类型转换为高精度、大范围的数据类型,如下:

源类型目标类型
charint、long、float、double
shortint、long、float、double
intlong、float、double
longfloat、double
floatdouble

注意:char类型不能通过隐式转换转换为short类型。

(2)显式转换举例

double a = 1.2;
int b = (int)a;   //将int类型转换为double类型,会直接忽略掉小数部分。

数据类型转换的不兼容性:

  • 数字和布尔不能类型转换
  • 字符和布尔不能类型转换
  • 字符转数字可以自动转换,数字转字符只能强制转换
  • 字符和数字相互转换的时候使用ASCII编码来进行转换

(3)字符和数字之间的转换(通过ASCII码转换)

字符转数字:

char myChar = 'A';
int myNum = myChar;
Console.WriteLine(myNum);

数字转字符:

int myNum = 65;
char myChar = (char)myNum;
Console.WriteLine(myChar);

(4)字符和字符串的特殊关系

字符串等于字符数组:

string str = "hello";
char myChar = str[0];
Console.WriteLine(myChar);   //此处可以打印数组第一个元素内容h

(5)值类型和字符串类型的相互转换

值类型(普通类型)转成字符串:

int a = 10;
//string str = a+"";  //可以通过+来进行转换
string str = a.ToString();  //通常使用ToString方法进行转换
double PI = 3.1415926;
string str = PI.ToString("F2");
Console.WriteLine(str);

ToString()可以直接转换成字符串,也可以格式化字符串,如下:

格式格式化字符串结果
货币2.5.ToString("C")¥2.50
十进制数25.ToString("D5")00025
固定点25.ToString("F2")25.00
常规2.5.ToString("G")2.5
数字2500000.ToString("N")2,500,000.00
百分比0.126.ToString(“P”)12.6%

字符串转值类型(普通类型):

string str = "12";
int a = int.Parse(str);
Console.WriteLine(a);

可以通过数据类型的Parse方法进行字符串转换成值类型。