C#类型转换、异常捕获、运算符

ModelEngine·创作计划征文活动 10w+人浏览 1.4k人参与

*类型转换 - 隐式转换:

◦ 本质:不同变量类型间的相互转换

◦ 隐式转换规则:不同类型间自动转换,一般是 “大范围类型 装 小范围类型” 也就是 小范围 转成 大范围

•相同大类型之间转换:

◦ 有符号:long → int → short → sbyte(范围大→小 )

◦ 无符号:ulong → uint → ushort → byte(范围大→小 )

◦ 浮点型:decimal 无法隐式存储 double/float ;double → float(范围大→小 )

◦ 特殊类型:bool、char、string 他们之间 无 隐式转换

//有符号:long → int → short → sbyte(范围大→小 )
long l = 1;  int i = 1;  short s = 1;  sbyte sb = 1;
l = i;  l = s;  l = sb;
i = s;  i = sb;
s= sb;
//无符号:ulong → uint → ushort → byte(范围大→小 )
ulong ul = 1; uint ui = 1; ushort us = 1; byte b = 1;
ul = ui; ul = us; ul = b;
ui = us; ui = b;
us = b;
//浮点型:decimal 无法隐式存储 double/ float ;double → float(范围大→小 )
decimal de = 1.1m;  double d = 1.1;  float f = 1.1f;
d = f;
•不同大类型间转换规则:
  1. 有符号 ↔ 无符号

◦ 无符号 装 有符号(有符号转无符号):有符号的变量是不能够隐式转换成无符号的,因为有符号有负数

◦ 有符号 装 无符号(无符号转有符号):若范围兼容(有符号值非负且在无符号范围内 ),可隐式转换

也可以理解为 有符号变量 可以 装 数值范围 比自己 正整数 范围小 的无符号变量类型

//有符号:正负整数和 0
long l2 = 1; int i2 = 1; short s2 = 1; sbyte sb2 = 1;
//无符号:正整数和 0
ulong ul2 = 1; uint ui2 = 1; ushort us2 = 1; byte b2 = 1;
// 无符号  装  有符号 (有符号转无符号):有符号的变量是不能够隐式转换成无符号的
// 有符号  装  无符号 (无符号转有符号)
l2 = ui2; l2= us2; l2 = b2;  //long-->uint-->ushort-->byte
i2 = us2;  i2 = b2;          //int-->ushort-->byte
s2 = b2;                     // hort-->byte
  1. 整型 ↔ 浮点型

◦ 浮点数 装 整型 :浮点数可以装载任何类型的整数

double → float→所有整形(有、无符号)→char

decimal 这个类型 没有办法用 隐式转换 的形式去存储 double 和 float 但decimal 可装任意整型

decimal →所有整形(有、无符号)→char

◦整型 装 浮点数:整型是不能够隐式转换浮点数 因为整数不能存小数

•特殊类型和其他类型之间:

bool:没有办法和其他类型相互隐式转换

string:没有办法和其他类型相互隐式转换

char:没有办法隐式的存储其他类型的变量,但可以 隐式转换 成整形和浮点型

因为char类型是一个16位的无符号整数,用于表示Unicode字符的编码值. 取值范围是0~65535,所以它可以隐式转换为比它宽度更大的数值类型 int long ushort ulong 等

char:隐式转换成数值类型是对应的数字,其实是一个ASCII码

•ASCII码:

*类型转换 - 显式转换:

•括号强转: (主要用于数值之间)

◦ 作用:将大范围类型 强转 为小范围类型

◦ 语法:变量类型 变量名 = (变量类型)变量;

◦ 注意:浮点 强转 整型会 直接 抛弃 小数部分(精度丢失); 整型转换 注意范围问题

//有符号整型变量
long l = 1; int i = 1; short s = 1; sbyte sb = 1;
sb = (sbyte)s; sb = (sbyte)i; sb = (sbyte)l;
s=(short)i; s = (short)l;
i = (int)l;
//无有符号整型变量
ulong ul = 1; uint ui = 1; ushort us = 1; byte b = 1;
b = (byte)us; b = (byte)ui; b = (byte)ul;
us = (ushort)ui; us = (ushort)ul;
ui = (uint)ul;
//浮点型
double d = 1.1; float f = 1.1f;
f=(float)d;
//无符号 强转 有符号
uint ui = 1; int i = -1;
ui=(uint)i;
Console.WriteLine(ui);//4294967295
//浮点数和整形  
int i = 1;     i=(int)1.24f;    Console.WriteLine(i);//1     // 浮点 强转 整型会 直接 抛弃 小数部分
//char 和 数值类型
int i = 65;
char c = (char)i; Console.WriteLine(c);//A
//bool 和 string      是不能够 通过 括号强转的
•Parse 法: (主要用于把字符串转成数值)

◦ 作用:将字符串类型 转换为 对应类型

◦ 语法:变量类型.Parse("字符串");

◦ 注意:字符串必须能转成对应类型,否则报错

//有符号
string str = "123";
int i = int.Parse(str);
int i2 = int.Parse("123");//i和i2其实是一样的
Console.WriteLine(i);//123
//我们填写 字符串 必须是要能够 转成 对应类型的字符 不然报错
int i3 = int.Parse("123.45");//这里是错误的
Console.WriteLine(i3);
//值的范围 必须是能够被 变量 存储的值 否则报错
sbyte sb = sbyte.Parse("128");//这里是错误的 因为sbyte 范围 - 128 ~127
Console.WriteLine(sb);
Console.WriteLine(sbyte.Parse("128"));//上下两个输出方式是等同的
//无符号的
Console.WriteLine(byte.Parse("1"));
Console.WriteLine(ushort.Parse("1"));
Console.WriteLine(uint.Parse("1"));
Console.WriteLine(ulong.Parse("1"));
//浮点数
float f = float.Parse("1.234");
double d = double.Parse("1.234");
//特殊类型
bool b = bool.Parse("true");
char c= char.Parse("A");
•Convert 法:(各种类型)

◦ 作用:更准确地在各类别间转换 会四舍五入

◦ 语法:Convert.To目标类型(变量或常量);

◦ 注意:填写的变量/常量必须正确,否则报错

//转字符串 如果是把字符串转成对应类型 那字符串一定要合规
int a = Convert.ToInt32("12");
Console.WriteLine(a);//12
//精度会比括号强转好一点  会四舍五入
a = Convert.ToInt32(1.56f);
Console.WriteLine(a);//2
//特殊类型
//把 bool类型 char类型 也可以转成 数值类型
a = Convert.ToInt32(true);Console.WriteLine(a);//1
a = Convert.ToInt32(false);Console.WriteLine(a);//0
a = Convert.ToInt32('A');Console.WriteLine(a);//65
//每一个类型都存在对应的 Convert中的方法
//有符号
sbyte sb = Convert.ToSByte("1");
short s = Convert.ToInt16("1");
int i= Convert.ToInt32("1");
long l = Convert.ToInt64("1");
//无符号
byte b = Convert.ToByte("1");
ushort us = Convert.ToUInt16("1");
uint ui = Convert.ToUInt32("1");
ulong ul = Convert.ToUInt64("1");
//浮点数
float f = Convert.ToSingle("1.23");
double d = Convert.ToDouble("1.23");
decimal de = Convert.ToDecimal("1.23");
//特殊类型
bool bo=Convert.ToBoolean(true);
char c = Convert.ToChar('A');
string str=Convert.ToString(123);
•其他类型转 string:

◦ 作用:拼接、打印等场景用

◦ 语法:变量.ToString();

string str = 1.ToString();
str = true.ToString();
str = 'A'.ToString();
str = 1.2f.ToString();
int i = 1; str = i.ToString();

*异常捕获(try-catch ):

• 作用:避免代码报错导致程序崩溃

• 语法:

try  { 放希望进行异常捕获的代码 } 
catch { 如果出错了会执行catch中的代码   catch (Exception e)通过e得到具体的错误信息} 
后面可选加 finally{最后执行的代码 不管有没有出错 都会执行的代码 目前是这样}

*运算符:

•运算符优先级:

•算数运算符:

①赋值符号:= 先看右侧,再看左侧,把右侧的值赋值给左侧的变量

②算数运算符:+ - * / % 先算右侧结果再赋值给左侧

③算数运算符的优先级:先乘除取余 后算加减 先算括号 多括号从里往外算

④复合运算符:+= -= *= /= %= 中间不能加空格

⑤自增减:++自增1 -- 自减1 a++ 先用后加 ++a 先加后用

⑥总结:

◦ 整数和整数运算,得到的结果一定是整数

◦ 整数和小数运算,得到的结果是小数

◦ 整数不可以除以0,也不可以对0取余

◦ 小数可以除以0,会得到∞无穷大,对0取余会得到NaN

◦ + 运算符 不仅可以进行数学运算 还可以用于字符串的拼接,字符串和数值之间会间接的拼接 不会进行数学运算 字符串数字相加得到的只能是字符串

    
     //int和int运算  得到的结果只能int
     //int和double运算  得到的结果只能是double
     int a = 2;
     int b = 4;
     // 2/4 = (int)0.5=>0
     Console.WriteLine(a / b);//0
     //(double)2.0/4 = 0.5
     Console.WriteLine((double)a / b);//0.5
     //0不能作为除数和取余的数
     //Console.WriteLine(10 / 0);
     //Console.WriteLine(10 % 0);
     Console.WriteLine(2.2 / 0);//∞
     Console.WriteLine(2.2 % 0);//NaN:Not a Number意思为他不是一个数字
•条件运算符:

用于比较两个变量或常数 条件运算符 一定存在左右两边的内容 左边内容 条件运算符 右边内容 是否大于> 是否小于< 是否等于== 是否不等于!= 是否大于等于>= 是否小于等于<=

条件运算符 低于 算数运算符

int a =5; int b=10;
//a > b;
//条件运算符 不能直接使用
//纯比较不用结果 那么对于我们来说 没有任何意义
//比较的结果 返回的是一个bool类型的值
//true和false 如果比较的条件满足 那么返回true 不满足就返回false
//先算右边 再赋值给左边
bool result = a > b;
Console.WriteLine(result);//F
result = a < b;
Console.WriteLine(result);//T
result = a >= b;
Console.WriteLine(result);//F
result = a <= b;
Console.WriteLine(result);//T
result = a == b;
Console.WriteLine(result);//F
result = a != b;
Console.WriteLine(result);//T
•比较运算符:

比较运算符用于比较多个数值之间的关系,会得到一个布尔值 真true 假false

计算结果比较 条件运算符的 优先级 低于算数运算符 先计算 再比较

不同数值类型之间 可以随意进行条件运算符比较

特殊类型 bool char string 只能同类型进行 == 和 != 比较

•逻辑运算符:

◦ && (逻辑与) 并且的意思 布尔值&&布尔值 真理:只有两边的布尔值都为true的时候 结果才为真 ,有一个为false 结果就为假 有假则假 同真为真

◦ || (逻辑或) 或者的意思 布尔值||布尔值 真理:只要有一个布尔值为true,结果就为true,两个都为false,结果才为false 有真则真 同假为假

◦ && 和 & || 和 | 区别:

使用&&和|| 的时候,如果当前的运算能到到最终的结果,后续的运算就不执行 也就是短路

使用& 和 | 的时候,会执行完所有的运算

◦ 逻辑非 ! 取反的意思 真变假 假变真

◦ 逻辑运算符 与 或 优先级 低于 条件运算符 低于算数运算符

逻辑运算符 非 优先级 最高 result = !( 3 > 2 ); //输出false

•位运算符:

主要用数值类型进行计算的 将数值转换为2进制 再进行位运算

◦位与 &:

规则:连接两个数值进行位计算 将数值转换为2进制 对位运算 有0则0

int a = 1;//001
int b = 5;//101
//  001
//& 101
//  001 = 1
int c = a & b;
Console.WriteLine(c);//1

◦位或 |:

规则:连接两个数值进行位计算 将数值转换为2进制 对位运算 有1则1

int a = 5;//101
int b = 3;//1010
int c = 20;//10100
//  00101
//| 01010
//  01111 
//| 10100
//  11111 => 16+8+4+2+1
int d = a | b | c;
Console.WriteLine(d);//31

◦异或 ^:

规则:连接两个数值进行位计算 将数值转换为2进制 对位运算 相同为0 不同为1

int a = 10;//1010
int b = 11;//1011
int c = 4;//100
//  1010
//^ 1011
//  0001
//^ 0100
//  0101 =>0+4+0+1
int d = a | b | c;
Console.WriteLine(d);//5

◦位取反 ~:

规则:写在数值前面 将数值转换为2进制 对位运算 0变1 1变0

int a = 5;//0101
//int有符号整形类型是4个字节32个位   0000 0000 0000 0000 0000 0000 0000 0000 
int a = 5;//0000 0000 0000 0000 0000 0000 0000 0101
int c = ~a;//1111 1111 1111 1111 1111 1111 1111 1010 =-6
//反码补码知识
Console.WriteLine(c);//-6

◦左移<< 和 右移动>>

规则:让一个数的2进制数进行左移右移

左移几位 右侧加几个0

int a = 5;//101
int c = a << 5;//10100000
// 1位 1010
// 2位 10100
// 3位 101000
// 4位 1010000
// 5位 10100000 =>128+0+32+0+0+0+0+0
Console.WriteLine(c);//160

右移几位 右侧去掉几个数

int a = 5;//101
int c = a >> 2;
// 1位 10
// 2位 1
Console.WriteLine(c);//1
•三目运算符:

套路:3个空位 2个符号

语法: 空位 ? 空位 : 空位 ;

格式:比较表达式 ? 值1 : 值2;

关键信息:bool类型 ? bool类型为真返回内容 : bool类型为假返回内容 ;

执行逻辑:比较表达式如果为true,则返回 值1,比较表达式如果为false,则返回 值2 返回值类型必须一致且必须使用

string str = true ? "条件为真" : "条件为假";
Console.WriteLine(str);//条件为真
int a = 5;
str = a < 1 ? "a于1 ":"a小于1 ";
Console.WriteLine(str);//a小于1
•数学运算:

Math C#内置的类,这个类里面定义了一些方法能够帮助我们进行一些数学计算

//求绝对值  Math.Abs
 Console.WriteLine(Math.Abs(-10));//10
 //四舍五入  Math.Round
 Console.WriteLine(Math.Round(3.5));//4
 //向取整  Math.Floor
 Cosole.WriteLine(Math.Floor(2.9));//2
 //向上取整  Math.Ceiling
 Console.WriteLine(Math.Ceiling(2.9));//3
 //求最大值  Math.Max
 Console.WriteLine(Math.Max(10, 20));//20
 //求最小值  Math.Min
 Console.WriteLine(Math.Min(10, 20));//10
 //幂运算   Math.Pow
 Console.WriteLine(Math.Pow(2, 4));//2^4   2*2*2*2
 //开平方  Math.Sqrt
 Console.WriteLine(Math.Sqrt(9));//3
 //圆周率  Math.PI
 Console.WriteLine(Math.PI); 
 //圆的面积:π*r*r
 //获取某个数值类型的最大值
 Console.WriteLine(int.MaxValue); 
 Console.WriteLine(double.MaxValue); 
 //获取某个数值类型的最小值
 Console.WriteLine(int.MinValue); 
 Console.WriteLine(double.MinValue); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值