*类型转换 - 隐式转换:
◦ 本质:不同变量类型间的相互转换
◦ 隐式转换规则:不同类型间自动转换,一般是 “大范围类型 装 小范围类型” 也就是 小范围 转成 大范围
•相同大类型之间转换:
◦ 有符号: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;
•不同大类型间转换规则:
-
有符号 ↔ 无符号
◦ 无符号 装 有符号(有符号转无符号):有符号的变量是不能够隐式转换成无符号的,因为有符号有负数
◦ 有符号 装 无符号(无符号转有符号):若范围兼容(有符号值非负且在无符号范围内 ),可隐式转换
也可以理解为 有符号变量 可以 装 数值范围 比自己 正整数 范围小 的无符号变量类型
//有符号:正负整数和 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
-
整型 ↔ 浮点型
◦ 浮点数 装 整型 :浮点数可以装载任何类型的整数
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);
1163

被折叠的 条评论
为什么被折叠?



