C# 隐式转换 #我的编程语言学习笔记

    //什么是类型转换
    //不同变量类型之间的互相转换
    //隐式转换是什么  不同类型之间彼此自动转换

    //规则 大范围装小范围
    
    //有符号   sbyte
    long l = 1;
    int i = 1;
    short s = 1;
    sbyte sb = 1;
    //隐式转换 int隐式转换成了long
    //可用大范围装小范围 隐式转换
    l = i;
    //不能够用小范围的类型去装在大范围类型
    //i = l;

    //右边的赋值给左边   隐式转换只能赋值相同的数据类型
    
    l = i;
    l = s;
    l = sb;
    
    i = s;
    i = sb;
    s = sb;

//无符号 ulong——>uint——>ushort——>byte
    ulong ul =1;
    uint  ui = 1;
    ushort us = 1;
    byte b = 1;

    ul = ui;
    ul = us;
    ul= b;
    ui = us;
    ui = b;
    us= b;
//浮点数  decimal double float
decimal de = 1.1m;
double d = 1.1;
float f = 1.1f;
//decimal这个类型 没有办法用隐式转换形式去赋值 double和float
//de = d;
//de = f;

//float可以转换double
#region  不同大类型直接转换 
//无符号 不能装负数的
//无符号
byte b2 = 1;
ushort us2 = 1;
uint ui2 = 1;
ulong ul2 = 1;

//有符号
sbyte sb2 = 1;
short s2 = 1;
int i2 = 1;
long l2 = 1;
//无符号装有符号
//有符号的变量 是不能够隐式转换成 无符号的 (因为没有负数的 去装一个可能有负数的)
//b2 = sb2;
//us2 = sb2;
//ul2 = sb2;

//有符号装无符号
//有符号变量 是可以装 无符号变量的 前提是 范围一定是要涵盖的 存在隐式转换
//i2 = ui2;  //因为 有符号变量数 可能会超过 这个无符号变量的范围
i2 = b2;   //因为 有符号的变量 不管是多少 都在  无符号变量的范围内




#endregion

#region 浮点数和整数(有、无符号)之间
// 
//浮点数装整数
float f2 = 1.1f;
double d2 = 1.1;
decimal de2 = 1.1m;
//浮点数 可以装载任何类型的 整数的
f2 = l2;
f2 = i2;
f2 = s2;
f2 = sb2;

f2 = ul2;
f2 = ui2;
f2 = us2;
f2 = b2;

f2 = 1000000000000000;  //1*10的19次方

//decimal 不能隐式存储 float和double
//但是它可以隐式储存整形的

de = l2;
de = ul2;

// double——>float——>所有整形变量(无符号、有符号)
// decimal——>所有整形变量(无符号、有符号)

//整数装浮点数  整数不能存小数

//i2 = f2;

#endregion
#region 特殊类型和其他类型之间转换
//  bool  //char     bool 不能隐式转换
//  bool不能存整形 不能存浮点数 



//  char类型可以隐式转换整形 





//string类型无法和其他类型进行隐式转换

#endregion




#region   隐式转换 大转小
//隐式转换 是变量类型转换的一种方式
//隐式转换是 不同类型之间自动切换转换
//大范围装小范围

//sbyte   1                  
//int     4 
//short   2
//long    8
sbyte t = 2;
int s = 5;
short sh = 0; 
long l = 1;
        l = s;  l = sh; l = t;
        s = sh; sh = t;
        s = t;

//byte   1                  
//uint     4 
//ushort   2
//ulong    8
byte b = 2; 
ushort c = 5; 
uint d = 0; 
ulong e = 1;
    e = d;  e = c;  e = b;
    d = c; d = b; 
    c = b;

//浮点数 float    
//double
//decimal  无法隐式转换储存   double和float
//float 可以隐式转换 double              
    float sf = 1.2f;  double dom = 3.2;
    dom = sf;

//特殊类型 bool char string   均不存在隐式转换

#region    //不同大类型的隐式转换
//无符号  不能装负数
//负数不能当盒子 装负数或者正数
   //long l1 = 1;   
   //ulong f2 = 1;
   //l1 = f2;     //long是有符号的是不能当盒子 装无符号的



//有符号的变量 是可以装进 无符号变量的前提是 范围一定要是涵盖过的 存在隐式转换
//int i2 =1;      //(-21亿多-21亿多)
//uint ui2 = 1;    //(0 - 42亿多)
//i2 = ui2;    //ui2有可能比i2大 所以不行

// 无符号
//大范围装小范围

//浮点数是可以装载任何类型的 整数的
float t2 = 1.2f;
double do2 =1.2;
decimal ci2 = 1.2m;

t2 = b;
t2 = c;
t2 = d;
t2 = e;

t2 = 1000000000000000000;     //t2存储范围都大 超过一定大小就会以1多少次方来计算  科学计数法
Console.WriteLine(t2);   //打印出来是1E+18  科学计数法

// double  float  所有整形(无符号、有符号)
//decimal  所有整形(无符号、有符号)
//char类型  没法储存 整形和浮点型   但整形和浮点可以储存char类型

char zi = '字';   //声明变量zi fu
char fu = '符';
int mei = zi;    //整形和浮点可以储存char类型
int mei1 = fu;
Console.WriteLine(mei+mei1);


//对应数字其实是一个 ASCII码
//计算机里面存储 2进制
//字符 中文 英文 标点符号 在计算机中都是一个数字
//一个字符 对应一个数字 ASCII码就是一种对应关系
#endregion


#region 总结
//总结 隐式转换规则
//高精度(大范围)装低精度(小范围)  
//double——float——整数(无符号、有符号)——char              
//decimal——整数(无符号、有符号)——char
//string 和bool 不参与隐式转换规则

//练习题
//什么情况下会出现数据类型的隐式转换,请举例说明。
//请将自己名字的每一个字符转换成数字并打印出来

char j = '从';   //声明变量j z
char z = '他';
int j1 = j;    //整形和浮点可以储存char类型
int z1 = z;
Console.WriteLine(j1+z1);





// 小数  double——float——整形(无符号、有符号)——char
//  decimal——整形(无符号、有符号)——char
decimal o = 3.5m;
int y = 3;
Console.WriteLine(o+y); //结果会被隐式转换为decimal类型  //6.5

  //有符号 long——int——short——sbyte
  //无符号  ulong——uint——ushort——byte

  //无符号 没办法 隐式存储有符号,
  //有符号可以隐式存储要看范围大小
  //  int(- 21亿到正21亿)——byte(0 - 255 )可以比int小 所以可以隐式转换
  //  例如  
            int df =-5;
           byte ms = 10;
            df = ms;
//请将自己名字的每一个字符转换成数字并打印出来
//char j = '从';
//ASCII 码
//char j = '他';
int jin = '从';  //字符是可以被装进 int的
Console.WriteLine(jin);
int zhe = '他';
Console.WriteLine(zhe);
Console.WriteLine(jin + zhe); //不加字符串是打印出来的计算结果
Console.WriteLine("李从名字对应数字是:"+li + cong); //加字符串  打印出来的分别靳对应数字哲对应数字

//注意看一下这俩区别,char是一个字符 string是字符串打印出来 char是数字  打印出来string是靳哲汉字 string配合双引号"" char配合的是单引号''
string jz = "李";
string wd = "卫东";
Console.WriteLine(jz+wd);    

#endregion

#endregion






//总结

// 高精度转低精度 (大范围)装低精度(小范围)
// double——>float——>整数(无符号、有符号)——>char
// decimal——>整数(无符号、有符号)——>char
// string和bool是不参与隐式转换规则的

//string类型无法和其他类型进行隐式转换


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值