一、类型转换

        1.显式转换

             通过内置的指令进行转换。

             第一种转换:强制转换: (要转换的类型)变量   (int)a   (double)a

float aa = 10.2f;
int bb = (int)aa;//把浮点数强制转换成整型 会省略小数部分
Console.WriteLine(bb);//10

            第二种转换:int.Parse(cc),转成double类型只需要把int.Parse() 改成double.Parse()

//如果要是不能转换的时候 会报错
string cc = "10";
int dd = int.Parse(cc); //把cc转成整型
Console.WriteLine(dd+10);//20

//转成bool类型
string bbb = "true"; //字符串true
bool ccc = bool.Parse(bbb);//把字符串转成bool
Console.WriteLine(ccc);//True

          第三种转换:万能转换Convert

//Convert.ToInt16() 转成16位整型,
//Convert.ToInt32() 转成int类型
//Convert.ToInt64() 转成long类型
string ee = "10";//字符串类型
long eee = Convert.ToInt64(ee);
Console.WriteLine(eee+30);//40

//转成字符串Convert.ToString()
Console.WriteLine(Convert.ToString(10)+30);//1030

//Convert.ToBoolean() 转成bool类型
Console.WriteLine(Convert.ToBoolean("true")); //True
//转成double类型
Convert.ToDouble();

//数字转成字符串通过采用toString()指令
Console.WriteLine(aaaa.ToString());

//字符串转数字
Convert.ToInt16("10"); // 结果就是整数

          第四种转换:tryParse() 尝试转换,如果转换成功了 返回值为true,如果没有转换成功 整体结果为false

// int.TryParse(要转换的数据, out 类型 result) result 就是转成之后的数据

string ff = "ss";

//int 默认值是0,没转成功了,result值是0
bool success = int.TryParse(ff, out int result); 
Console.WriteLine("转换是否成功"+success+",转成功了之后的数据:"+result);  //false,0

int.TryParse("10", out int r);// r就是整型的数据

  2.隐式转换

       不用写任何指令直接赋值, 底层帮其进行转换。

// 从小的范围的可以转到大的范围
int al = 10;
long bl = al; //把int类型数据 赋值给long类型的数据,int类型属于小范围,long大范围数据

long c1 = 10;
//int d1 = c1;  报错不允许从大的范围向小范围进行转换

//数字转成字符串
int aaaa = 10;
//数字转成字符串最简单的方法使用拼接
string bbbb = aaaa + "";

        练习: 从键盘输入身高(cm)和体重(kg), 计算BMI值

// Console.ReadLine();// 读取用户输入是一个字符串类型,需要把字符串转成数字类型
Console.Write("请输入身高:");
float shenGao = float.Parse(Console.ReadLine());//输入身高

Console.Write("请输入体重:");
int tiZhong = int.Parse(Console.ReadLine());// 输入体重

//计算BMI
float BMI = tiZhong / (shenGao * shenGao); // / 除以
Console.WriteLine("BMI的值为:"+BMI);

二、运算符

1.算术运算符

+  -  *  /  %

注意:

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

        2. / 和 % 中,a = 10/0;  a = 10%0; 错误!!!

 Console.WriteLine(10+20);//30 + 加法
 Console.WriteLine(10-20);// -10 - 减法
 Console.WriteLine(10*20);//200  *乘法
 Console.WriteLine(10/20);//0  / 求整数
 Console.WriteLine(10%20);//10 % 求余数

 Console.WriteLine(10 /(float)3); //3.333333
 Console.WriteLine(10 * 1.0 / 3); //3.33333333333333
// Console.WriteLine(10/0); 0 不能作为除数
 Console.WriteLine(-100%-3);//-1

//int num = 10;
//Console.WriteLine(num%0); 报除数为0的异常

 // 321 求 百位、十位、个位数分别为?
 int ge = 321 % 10;
 Console.WriteLine(ge);

 int shi = 321 % 100 / 10;
 Console.WriteLine(shi);

 int bai = 321 / 100;
 Console.WriteLine(bai );

结论:
①.整数与整数参与运算得到的整数
②.整数与实数参与运算得到的实数
③.整数不能除以0,也不能对0取余数
④.实数可以除以0,得到正负∞。实数对0取余数得到NaN

2.赋值运算符号

=,+=,-=,*=,/=, %=
int aa = 100; //把100赋值给aa =就是赋值
aa += 100;  //+= 加上100之后赋值给aa              200
aa -= 10; // aa = aa-10                           190
aa *= 10;// aa= aa*10                             1900
aa /= 3;  //aa = aa / 3                           633
aa %= 3;   // aa = aa%3                           0
Console.WriteLine(aa);

3. ++   --

 ++:自加1,--:自减1;

    a = ++b, a= b++ 区别:

        1.++ 在变量后跟着,先赋值,在++(自加1)

        2.++ 在变量前跟着,先++(自加1),再赋值

        ++:自增,自身加一;++在前表示先让该变量加一,再让其参与运算。++在后表示先让该变量参与运算,再让其加一。

        --:自减,自身减一;--在前表示先让该变量减一,再让其参与运算。--在后表示先让该变量参与运算,再让其减一。

 //++  每次加1
 //--  每次减1
 int cc = 10;
 cc++;// cc = cc+1
 Console.WriteLine(cc);// 11
 cc--; 
 Console.WriteLine(cc);//10

 //++在前 先加1 再去执行cw  打印就是加1之后
 //++在后 先打印dd 再加1 ,打印的未加1 
 int dd = 20;
 Console.WriteLine(dd++);//20
 Console.WriteLine(dd);//21
 Console.WriteLine(++dd);//22
 //例子
 int a = 2, b = 3;
 int c = (a++) * (--b); // a++在后 先取a 再计算乘以, 该句代码执行完之后 a的值就加1
 Debug.Print("a = " + a); //3
 Debug.Print("b = " + b); //2
 Debug.Print("c = " + c); //4

4.比较运算符

<, >, <= ,>= ,== ,!=    bool类型
 Console.WriteLine(10>20); //false
 Console.WriteLine(10<20); //true
 Console.WriteLine(10<=20); //true
 Console.WriteLine(10>=20); //false
 Console.WriteLine(10==20); //false   
 Console.WriteLine(10!=20); //true, != 不等于 

5.三目运算符

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

//  10>20 条件
//  ? 是否 ,判断条件是否成立
//  如果成立了取?后面值;如果不成立 取冒号后面的值
//  = 把取出的值赋值给aaa

string aaa = 10 > 20 ? "刘德华" : "王宝强"; 
Console.WriteLine(aaa);

       练习:输入三个数,求最大数,最小数,中间数(必须使用三目运算符)

 int d1 = 10;
 int d2 = 20;
 int d3 = 15;
 int temp;// 代表俩俩相比之后的最值
 int max;// 最大值
 int min;// 最小值

 //d1和d2相比,取出来最大值赋值temp
 temp = d1 < d2 ? d2 : d1; //如果d1<d2 取d2 ;如果不下于d2,取d1
 //要把temp和d3进行对比
 max =  temp < d3 ? d3 : temp; // //如果temp<d3 取d3 ;如果不小于d3,取temp
 Console.WriteLine(max);//20

 int temp1;//找最小值的临时变量
 temp1 = d1 < d2 ? d1 : d2;// 找出d1和d2小值
 min = temp1 < d3 ? temp1 : d3;
 Console.WriteLine(min);//10

 int middle = d1 + d2 + d3 - max - min;   //中间值
 Console.WriteLine(mid);//15

6.逻辑运算符

   1. & 和 &&

//&(与):  (如果一个条件为false,另外一个正常走)  T&T=T   T&F=F   F&T=F    F&F=F

     Console.WriteLine(10>20 & 10<14);  //false
     Console.WriteLine(10<20 & 10<14);  //true
     Console.WriteLine(10>20 & 10>14);  //false
     Console.WriteLine(10<20 & 10>14);  //false
// &&(并且),会造成短路(如果一个条件为false 另外一个就不走了)   
// T&&T=T   T&&F=F   F&&T=F    F&&F=F

   Console.WriteLine(10 > 20 && 10 < 14);  //false
   Console.WriteLine(10 < 20 && 10 < 14);  //true
   Console.WriteLine(10 > 20 && 10 > 14);  //false
   Console.WriteLine(10 < 20 && 10 > 14);  //false
 

   & 和 &&  区别

  int a = 3, b = 4;
  bool result = a > b & a++ == 3;
  Debug.Print("result = " + result);  //false
  Debug.Print("a = " + a);   //4    证明后面的a++已经执行了


  int a = 3, b = 4;
  bool result = a > b && a++ == 3;
  Debug.Print("result = " + result); //false
  Debug.Print("a = " + a);//3 证明后面的a++不执行

 //&: 左边条件为false的情况,另一个条件也执行
 //&&: 左边条件为false的情况,另一个条件不执行

   2. | 和 ||

 //  | 或 :  T|T=T   T|F=T   F|T=T    F|F=F
 Console.WriteLine(10 > 20 | 10 < 14); // true
 Console.WriteLine(10 < 20 | 10 < 14); //true
 Console.WriteLine(10 > 20 | 10 > 14);//false
 Console.WriteLine(10 < 20 | 10 > 14); //true

 //  || 或者 会造成短路  T||T=T   T||F=T   F||T=T    F||F=F

 Console.WriteLine(10 > 20 || 10 < 14); // true
 Console.WriteLine(10 < 20 || 10 < 14); //true
 Console.WriteLine(10 > 20 || 10 > 14);//false
 Console.WriteLine(10 < 20 || 10 > 14); //true

   | 和 || 的区别

int a = 3, b = 4;
bool result = a < b | a++ == 3;
Debug.Print("result = " + result); // true
Debug.Print("a = " + a);    // a=4

int a = 3, b = 4;
bool result = a < b || a++ == 3;
Debug.Print("result = " + result); //true
Debug.Print("a = " + a);   // a=3

// |: 左边条件为true的情况,另一个条件也执行
// ||: 左边条件为true的情况,另一个条件不执行

总结:
  &:  只要一个为false,整体为false,左边条件为false ,另外一个正常走
&& : 只要一个为false,整体为false ,会短路,左边条件为false,另外一个不再判断了

 |: 只要一个为true,整体就是True, 左边条件为false ,另外一个正常走
|| :   只要一个为true ,整体就是true ,会短路 ,左边条件为false,另外一个不再判断了

7.位运算符

<<, >> , &, | , ~

 位运算:先把转成二进制 之后在进行计算

 //1 << 左移,相当于原数*2的2次方 => 3* 2的2次方=12
    // 0000 0011  把数字向左移动2位,右侧补0
    //0000 1100 转成10进制 12
    Console.WriteLine(3 << 2);

// 2 >> 右移    原数 / 2的移动次方   例如 :5/(2的2次方)=1
    //0000 0101 >> 2 => 0000 0001 => 1
    Console.WriteLine(5 >> 2);

//3 & 运算 全1才为1  1000 & 1001 => 1000
    //0011 & 0101   => 0001=>1
    Console.WriteLine(3 & 5);

//4 | 位或运算  只要一个为1就为1
    //1000 | 1001 =>  1001
    //0011 | 0101 => 0111 =>7
    Console.WriteLine(3|5);
//^ 位 异或
//相同为0 不同为1
    1^1 = 0
    0^0=0
    0^1=1
    1^0=0
    1000 ^ 1010 ===>0010

~ 位 非
按位取反 0变成1 ,1变成0 ,快速记忆  ~8= -8-1=-9


~8 :8的二进制是1000,但是8按32位计算 8的二进制是 00000000 00000000 00000000 00001000 按位取反变成 11111111 11111111 11111111 11110111;
前面为1 代表是负数,负数转成10进制 需要先按位取反,再加1 ,再加负号;
也就是对11111111 11111111 11111111 11110111 取反 变成00000000 00000000 00000000 00001000  变成10进制为8 再加1,变成9 ,再加负号 变成-9)


~-8 带入万能公式 ~-8=-(-8)-1=7

// ~3 => ~ 0000 0011 => 1111 1100(补码) => 10000011(反码) => 1000 0100(源码)=> -4
// -9 -8 -7 -6 -5 -4 -3 -2 -1 分割 0 1 2 3 4 5 6 7 8 9
Console.WriteLine(~8);

三、练习

1.输入三个数 带入公式 (a + b) * c

// 输入三个数 带入公式 (a + b) * c
        Console.WriteLine("请输入第一个数:");
        int num1 = int.Parse(Console.ReadLine());

        Console.WriteLine("请输入第二个数:");
        int num2 = int.Parse(Console.ReadLine());

        Console.WriteLine("请输入第三个数:");
        int num3 = int.Parse(Console.ReadLine());

        Console.WriteLine((num1 + num2) * num3);

        // Debug 调试
        Debug.Print((num1 + num2) * num3 + "");

2.输入梯形的上底长、下底长、高,求面积

/ 输入梯形的上底长、下底长、高,求面积
        int length1 = int.Parse(Console.ReadLine()); // 上底
        int length = int.Parse(Console.ReadLine());   // 下底
        int height = int.Parse(Console.ReadLine());   // 高度

        // 注意:这里有个变量名笔误,下底变量名是 length,容易混淆
        int area = ((length1 + length) * height) / 2;
        Console.WriteLine(area);

3.实现交换a和b的值,如果不让使用中间变量又该如何实现?

// int a = 3; int b = 5; 实现交换a和b的值,如果不让使用中间变量又该如何实现?

        // 把a=5  把b改成3
        // 最常用的方法:定义一个临时变量 存储a的值, 然后把a=b; 再把临时变量赋值b
        int a = 3; 
        int b = 5;
        int temp = a; // temp = 3
        a = b; // a = 5
        b = temp; // b = 3
        Console.WriteLine("a的值为:" + a + ", b的值为: " + b);


        // 第二种方法通过运算进行交换值
        a = a + b;  // a = 8
        b = a - b;  // b = 8 - 5 = 3
        a = a - b;  // a = 8 - 3 = 5
        Console.WriteLine("a的值为:" + a + ", b的值为: " + b);

更多推荐