类型转换
类型转换就是将A类型的变量赋值给B类型的变量
隐式类型转换
隐式转换(自动转换),就是从小范围到大范围的转换
#region 隐式类型转换 //隐式转换(自动转换),就是从小范围到大范围的转换 //sbyte<short<int<long int i1 = 10; long i2 = i1; // short s1 = i1; 不允许 因为int存的多 //ulong ul1 = i1; 不允许 因为int存负数, ulong不能存负数 // ushort us1 = i1; 不允许 因为int存的多 ushort存的少 并且不能存负数 sbyte sbyte1 = 5; //byte byte2 = sbyte1;不允许 因为sbyte 可以存负数 byte不能存负数 byte sbyte2 = 6; // sbyte sbyte3 = sbyte2; 不允许 因为byte最大能存到255 sbyte只能存到127 ushort us2 = 21;//无符号 int int4 = us2; //可以转成有符号的int uint us3 = us2;//可以转成无符号的int short sh1 = 33; //有符号 int i3 = sh1; //可以转为有符号的int //uint ui4 = sh1; 不能转为无符号的uint //ulong ul4 = sh1; 不能转为无符号的ulong /* * 总结: * 1.小范围能转大范围,大范围不能转小范围 * 2.同级别之间不能转换 * 3.无符号可以转换大范围的有符号和无符号 * 4.有符号可以转换大范围的有符号,不能转无符号 */ //小数的转换 //float < double float f1 = 2.2f; double d1 = f1; //整数可以直接转小数 ulong i6 = 3; float f2 = i6; double d2 = i6; double d3 = 10.3; //int i7 = d3; 不允许 因为整形不能保留小数位 //派生类 :子类 基类:父类 所有类型的基类都是object //从派生类转为基类也可以转换 int i7 = 100; char s = 'A'; object o1 = s; #endregion
显示类型转换
从大范围到小范围的转换
#region 显示类型转换 //从大范围到小范围的转换 uint int1 = 20; //在被转换的数据前面加上(目标类型) 进行显式转换 int int2 = (int)int1; //强制转换可能会导致数据丢失 uint int3 = 256; byte byte1 = (byte)int3; Console.WriteLine(byte1);//0 double dou1 = 22.9; int in4=(int) dou1; Console.WriteLine(in4); //并不是所有的显式转换都可以转换 string s1 = "吴亦凡"; // char c1 =(char)s1; char c2 = 'C'; // string s2 = (string)c2; //char类型int类型之间是根据ASCII码进行转换的 //A-Z == 65-90 https://blog.csdn.net/weixin_45788237/article/details/136460300?spm=1001.2014.3001.5501 int in5=(int)c2; Console.WriteLine(in5);//67 int in6 = 67; char c3 = (char)in6; Console.WriteLine(c3);//C #endregion
字符串和其他类型之间的转换
#region 字符串和其他类型之间的转换 //其他类型转字符串 int in1 = 123; double do1 = 123.123; bool b = true; in1.ToString();// 123===>"123" do1.ToString();//123.123===>"123.123" b.ToString(); // true====> "true" int num = 1008611; Console.WriteLine(num.ToString());//1008611 ==> "1008611" Console.WriteLine(num.ToString("F1"));//"1008611.0" Console.WriteLine(num.ToString("F2"));//"1008611.00" Console.WriteLine(num.ToString("n"));//1,008,611.00 Console.WriteLine(num.ToString("c"));//¥1,008,611.00 //...................... // 字符串转其他的类型 string st1 = "123"; int in7=int.Parse(st1);//"123"===> 123 string st2 = "123.123"; double dou2=double.Parse(st2); Console.WriteLine(dou2);//"123.123"==>123.123 //in7=int.Parse("123.123"); 报错 因为123.123不是int类型 // in7=int.Parse("1a"); dou2 = double.Parse("123"); // 布尔值的转换 不区分大小写 但是单词之间不能有空格 bool b2 = bool.Parse("TRUE"); Console.WriteLine(b2); #endregion
Covert
Covert类就是专门进行类型转换的类,Convert类提供的方法可以实现各种数据类型之间的转换
int i1 = 11; byte by =Convert.ToByte(i1); short sh = Convert.ToInt16(i1); //Convert.ToByte() 转成byte //Convert.ToInt16() 转成short //Convert.ToUInt16() 转成ushort //Convert.ToInt32() 转成int //Convert.ToInt64() 转成long //Convert.ToUInt64() 转成ulong }
运算符
运算符:就是告诉编译器执行特定的数学逻辑操作的符号
表达式
表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。
表达式其实就是一个式子:a+b ,true && false 。
表达式也是值类型
算术运算符
+ - * / %
注意
-
两个整数 / ,得到的一定是整数(小数位前面的整数)
-
/和%中,a = 10/0; a = 10%0; 错误!!!
代码演示
#region 算数运算符 Console.WriteLine(1+1); int int1 = 2 + 3; Console.WriteLine(int1); Console.WriteLine(5-2); Console.WriteLine(5*5); //int和int运算 只能得到int //2/4=(int)0.5 ===>0 int int2 = 2; int int3 = 4; Console.WriteLine(int2/int3); Console.WriteLine((double)int2 / int3); // % 取余 Console.WriteLine(5%2); Console.WriteLine(10%3); Console.WriteLine(7 % 4); Console.WriteLine(17 % 4); //0不能作为除数和取余的数 //Console.WriteLine(10/0); //Console.WriteLine(10%0); Console.WriteLine(2.2/0);//∞ Console.WriteLine(2.2%0);//NaN Not a Number 不是一个数字 /* * 1.整数和整数运算,一定得到整数 * 2.整数和小数运算,可以得到小数 * 3.整数不能除以0,也不能对0取余 * 4.小数可以除以0,得到无穷大,对0取余得到NaN */ //+运算符 不仅可以用于数学运算,还可以用于字符串的拼接 string name = "吴亦凡"; int age = 20; string sex = "男"; string info = name + "今年" + age + "岁,性别是" + sex; Console.WriteLine(info); //字符串和数值之间会进行拼接,不会进行数学运算 string info1 = name + "今年" + age+10 + "岁,性别是" + sex; Console.WriteLine(info1); string info2 = name + "今年" + (age + 10) + "岁,性别是" + sex; Console.WriteLine(info2); #endregion
赋值运算符
=, +=,-=,*=,/=,%=
中间不能加空格,他们是一个整体
代码演示
//= 表示赋值 一般用于变量或者属性的设置和修改 int i1 = 10; People p1=new People(); p1.Name = "吴亦凡"; p1.Name = "罗志祥"; //i1 = i1 + 5; i1 += 5; Console.WriteLine(i1); /* * 当出现a=a+n的时候,就可以简写为a+=n * * i1=i1+5===>i1+=5; * i1=i1-5===>i1-=5; * i1=i1*5===>i1*=5; * i1=i1/5===>i1/=5; * i1=i1%5===>i1%=5; */
++ ,--
自加1,自减1
a = ++b, a= b++ 区别
-
++ 在变量后跟着,先参与运算,在++(自加1)
-
++ 在变量前跟着,先++(自加1),再参与运算
--与++同理
代码演示
//++ -- //自加1 自减1 //a++ ===> a=a+1; //a-- ===> a=a-1 int a = 10; int b = ++a; Console.WriteLine(b); Console.WriteLine(a); int c = 11; int d = c++; // d=11 c=12 int e = ++c; // c=13 e=13 int f = --c;// c=12 f=12 Console.WriteLine(d);//11 Console.WriteLine(e);//13 Console.WriteLine(f);//12
比较运算符(关系运算符)
<,>,<=,>=,==,!= 返回 bool类型
代码演示
//关系运算符用于比较多个数值之间的关系,会得到一个布尔值 int aa = 3; int bb = 5; bool b1 = aa > bb; b1 = aa < bb; b1 = aa <= bb; b1 = aa >= bb; //= 表示赋值 ==表示比较两个数是否相等 b1 = aa == bb; b1 = aa != bb; Console.WriteLine(b1);
三目运算符
格式:比较表达式 ? 值1 : 值2; 比如:string info = a > b ? "值1" : "值2";
代码演示
#region 三目运算符 三元表达式 三元运算符 //格式:比较表达式? 值1 : 值2; //比如:string info = a > b ? "值1" : "值2"; //执行逻辑:比较表达式的值如果为true,则返回值1,比较表达式的值为false,则返回值值2 int a2 = 10; int b2 = 20; Console.WriteLine(true?"吴亦凡":"罗志祥"); string name1 = a2>b2 ? "吴亦凡" : "罗志祥"; Console.WriteLine(name1); //判断 是否成年 int age1 = 25; string remark = age1 > 18 ? "成年" : "未成年"; //string remark = age1 < 18 ? "未成年" : "成年"; //判断三个数中的最大值 int in1 = 13, in2 = 5, in3 = 2; //int max = in1 > in2 ? in1 : in2; //max=max>in3 ? max : in3; //三目运算符不仅可以写某个值,还可以写一个表达式 int max = in1 > in2 ? in1 > in3 ? in1 : in3 : in2 > in3 ? in2 : in3; Console.WriteLine(max); #endregion
逻辑运算符
-
&(与),|(或),&&(短路与),||(短路或),!(非)
//&(逻辑与运算) 表示 和 与 and 两边都为true 结果才为true,只要有一边为false,结果就为false Console.WriteLine(true&true); Console.WriteLine(true & false); Console.WriteLine(false & false); Console.WriteLine(1<2&10>11); Console.WriteLine(11 < 2 & 10 > 11); // |(逻辑或运算) 表示 或 or 两边只要有一个true 结果就为true Console.WriteLine(true|true); Console.WriteLine(false|true); Console.WriteLine(false|false); Console.WriteLine(1 < 2 | 10 > 11); Console.WriteLine(11 < 2 | 10 > 11); Console.WriteLine("----------------------------------------------"); // &&(短路与运算) Console.WriteLine(true&&true); Console.WriteLine(true && false); Console.WriteLine(false && false); Console.WriteLine(1 < 2 && 10 > 11); Console.WriteLine(11 < 2 && 10 > 11); // ||(短路或运算) Console.WriteLine(true || true); Console.WriteLine(false || true); Console.WriteLine(false || false); Console.WriteLine(1 < 2 || 10 > 11); Console.WriteLine(11 < 2 || 10 > 11); Console.WriteLine("----------------------------------------------"); /* * && 和& ||和|的区别? * * * 使用&&和||的时候,如果当前运算能得到最终的结果,后续的运算不会执行 * &和|总会执行完毕所有的运算 * */ //int num1 = 3,num2 = 4; 1.判断num1>num2 2.判断num1++==3 3.判断false&true 4.得到false //bool bools = num1 > num2 & num1++ == 3; //Console.WriteLine(bools);//False //Console.WriteLine(num1);//4 //int num1 = 3, num2 = 4; 1.判断num1>num2 2.得到false //bool bools = num1 > num2 && num1++ == 3; //Console.WriteLine(bools);//False //Console.WriteLine(num1);//3 //int num1 = 3, num2 = 4; 1.判断num1>num2 2.得到false //bool bools = num1 < num2 | num1++ == 3; //Console.WriteLine(bools);//True //Console.WriteLine(num1);//4 int num1 = 3, num2 = 4; //1.判断num1>num2 2.得到false bool bools = num1 < num2 || num1++ == 3; Console.WriteLine(bools);//True Console.WriteLine(num1);//3 /* * * 总结: * * & 遇到一个false 最终结果就为false * | 遇到一个true 最终结果就为true * && 遇到一个false 就直接结束运算, 后续的代码不再执行(遇假则假) * || 遇到一个true 接直接结束运算,后续的代码不再执行(遇真则真) */ //! 非 取反 true取反为false false取反为true Console.WriteLine(!true); Console.WriteLine(!(10>20));
运算符优先级,从高到低
-
. () {} ;
-
++ -- !
-
* / %
-
+ -
-
< > <= >=
-
== !=
-
&
-
|
-
&&
-
||
-
? :
数学运算
//Math C#内置的类, 类中定义了一些函数,用来帮助我们进行数学运算 //求绝对值 Console.WriteLine(Math.Abs(-33)); //四舍五入取整 Console.WriteLine(Math.Round(3.5)); //向下取整 Console.WriteLine(Math.Floor(3.9)); //向上取整 Console.WriteLine(Math.Ceiling(3.1)); //求最大值 Console.WriteLine(Math.Max(10,30)); //求最小值 Console.WriteLine(Math.Min(10, 30)); //幂运算 Console.WriteLine(Math.Pow(2,4)); //16 2*2*2*2 //开平方 Console.WriteLine(Math.Sqrt(9)); Console.WriteLine("---------------------------------"); //MaxValue 获取某个数值类型的最大值 Console.WriteLine(int.MaxValue); Console.WriteLine(double.MaxValue); //MinValue 获取某个数值类型的最小值 Console.WriteLine(int.MinValue); Console.WriteLine(double.MinValue);
C#流程控制
流程控制: 不管简单的程序还是复杂的程序,一般包含三种结构:顺序结构,选择结构,循环结构。 顺序结构:默认就是顺序结构,就是说程序自上而下依次按照顺序执行。 选择结构(分支结构):程序有条件(有选择)的去执行某些代码(单分支if 双分支if-else 多分支if-elseif-……-else switch-case) 循环结构:程序有条件的重复执行某些代码(for循环<foreach>
while循环<do-while>
)
选择结构
if
注意语法结构:
-
单分支 if
-
双分支 if else
-
多分支 if else if else if 适合条件为判断同一变量的不同区间
格式: 单分支:if+tab if(条件){成立:执行代码}
双分支:if(条件){成立:执行代码1}else{不成立:执行代码2}
单分支和双分支
/* * 1.单分支结构语法格式: * if(布尔值或者布尔表达式){ * if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码 * } */ if (123>11) { Console.WriteLine("执行"); } //需求:判断用户是否成年 int age = 12; if (age > 18) { Console.WriteLine("成年"); } /* * 2.双分支结构语法格式: * if(布尔值或者布尔表达式){ * if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码 * }else{ * * if()里面的布尔值或者布尔表达式的结果为false的时候,执行这里面的代码 * } */ if (age > 18) { Console.WriteLine("成年"); }else { Console.WriteLine("未成年"); }
多分支
格式: 多分支:if(条件){成立:执行代码1}elseif(条件){成立:执行代码2}……else{都不成立:执行代码n}
注意:1.判断条件是有递进关系 2.一旦一个分支执行了其他分支都不执行
/* * 3.多分支结构语法格式: * if(布尔值或者布尔表达式){ * if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码 * }else if(布尔值或者布尔表达式){ * if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码 * }else if(布尔值或者布尔表达式){ * if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码 * .... * }else{ * if()里面的布尔值或者布尔表达式的结果为false的时候,执行这里面的代码 * } */ //执行该过程:当某个条件语句成立,则执行后面的代码块,都不成立,则执行else后的代码块, //注意:当多个条件都成立的时候,执行最上面的代码块,当前面的if()满足条件执行之后,后面的代码块就不再执行了 if (age<=12) { Console.WriteLine("儿童"); }else if (age<=18) { Console.WriteLine("青少年"); }else if (age <= 40) { Console.WriteLine("青年"); } else if (age <= 50) { Console.WriteLine("壮年"); }else { Console.WriteLine("老年"); }
分支嵌套
//4. 分支嵌套 //if(0>age<123) 错误 比较运算符不能连用的 if (age>0&&age<134) { if (age <= 12) { Console.WriteLine("儿童"); } else if (age <= 18) { Console.WriteLine("青少年"); } else if (age <= 40) { Console.WriteLine("青年"); } else if (age <= 50) { Console.WriteLine("壮年"); } else { Console.WriteLine("老年"); } } else { Console.WriteLine("输入的年龄不合法"); }
多个if和ifelse的区别?
int aa = 10; //if (aa>5) //{ // Console.WriteLine("大于5"); //} //else if(aa>6) //{ // Console.WriteLine("大于6"); //} if (aa > 5) { Console.WriteLine("大于5"); } if (aa > 6) { Console.WriteLine("大于6"); } //多个if和ifelse的区别: //多个if是所有的if都判断,条件成立都会执行 //ifelse 是只要上面的满足条件,就不再对下面的elseif进行判断