【c#基础】2.类型转换与运算符
一、类型转换
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);
更多推荐


所有评论(0)