C# 类型转换

类型转换

类型转换就是将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 。

表达式也是值类型

算术运算符

+ - * / %

注意

  1. 两个整数 / ,得到的一定是整数(小数位前面的整数)

  2. /和%中,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)

  2. ++ 在变量前跟着,先++(自加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));
​
​

运算符优先级,从高到低

  1. . () {} ;

  2. ++ -- !

  3. * / %

  4. + -

  5. < > <= >=

  6. == !=

  7. &

  8. |

  9. &&

  10. ||

  11. ? :

数学运算

//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进行判断
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值