操作符三
1.类型转换
(1)隐式implicit类型转换
- 不丢失精度的转换
- 子类向父类的转换
- 装箱 zhi—object
(2)显式explicit类型转换 - 有可能丢失精度(甚至发生错误)的转换,即cast
- 拆箱 object —zhi
- 使用Convert类
- ToString方法与各数据类型的Parse/TryParse方法
(3)自定义类型转换操作符
示例:
stone和monkey之间计算机的转换不能识别,需要自定义转换方法。在被转换的类型里进行。
往下展开:
int x = Convert.ToInt32(string);
不丢失精度的转换:int转成long,single转换double等
子类向父类的转换:
Teacher t = new Teacher();
Human h = t;
h. 此时成员访问符,看不到实例中t的方法teach,因为规定引用变量去访问引用的实例的成员时,只能访问到变量h的类型所具有的类型。此例中human类具有eat和think方法。
(T)x 显示类型转换:
有可能精度丢失甚至发生错误的强制类型转换cast:
uint x = 65536;
ushort y = (ushort)x;
Covert类:
bool byte,single string uint16 uint32 等
其他类型转换为string时:
调用tostring静态方法;
parse方法。只能解析格式正确的字符串类型。doublex = double.parse(a,b) 这就不行
就会用到tryparse 总会返回一个bool值,成功为true,转换失败为false
运算操作符:
±/ %
整数乘法 乘号两边是int uint long ulong
浮点类型single double float
务必留意“数值提升”
比如var x = 3.04 =12.0 x 是double型
int x= 5;
int y = 4;
int z = x/y ; z=1; 整除需要注意被除数不能为零
浮点类型可以除零 double x =5.0; double y = 0;
正数/0 = 正无穷大 负数/0=负无穷大
double x= (double)5/4 (1.25,是浮点型)
double x = double(5/4) (1.0,是int转换成的浮点型)
移位操作符:<<左移 >>右移
int x = 7; int y= x<<1; 转换成二进制进行移位
左移不管是正数还是负数,补进来的都是0;
右移正数最高位补 0 负数最高位补1
关系操作符:<> <= >= (is as)类型检验 运算结果都是bool型的
除了比较数值类型还可以比较字符类型 或者字符串是否相等
char char1=‘a’; 97
char char2 = ‘A’; 65
var result = char1> char2 结果为true
逻辑操作符:
位与& 位或| 按位异或^ (不一样时才会为真)
int x=7; int y=28; int z= x&y; 转换成二进制按位求与
条件与&& 条件或|| 一般是来操作bool类型的值的
int x = 5; int y=4; int a = 100; int b= 200;
if(x>y && a<b) 为真
null合并
Nullable x=null; 可空int类型
int?x = null; 同上
int y = x??0; 如果x是null值,那我用0来代替
条件操作符:?:
赋值和lambda表达式
赋值操作符是从右向左进行