类型转换之隐式转换

类型转换

类型转换就是不同变量类型之间的相互转换
隐式转换的基本规则——>不同类型之间的自动转换
大范围装小范围

相同大类型之间的转换

可以用大范围装小范围的类型(隐式转换),不能够用小范围的类型去装在大范围的类型。
附上代码:

//有符号 long——>int——>short——>sbyte
long l = 1;
int i = 1;
short s = 1;
sbyte sb  = 1;
//隐式转换 int隐式转换成了long
l = i;
l = s;
l = sb;

i = s;

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这个类型,没有办法用隐式转换的形式去存储dounble和float
//de = d;
//de = f;
//float 是可以隐式转换成 double
d = f;


//特殊类型 bool char string
//他们之间不存在隐式转换
bool bo = false;
char c = 'a';
string str = "123";

不同大类型之间的转换

无符号和有符号之间

有符号变量是可以装无符号变量的前提是范围一定要是涵盖的存在隐式转换。
附上代码:

//无符号 不能装负数的
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;
//ul = sb2;

//有符号装无符号
//i2 = ui2;//因为 有符号的变量 可能会超过 这个无符号变量的范围
i2 = b2;// 因为 有符号的变量 不过是多少 都在无符号变量的范围内

浮点数和整数(有、无符号)之间

浮点数装整数

整形转为浮点数,是存在隐式转换的。
附上代码:

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;

decimal不能隐式存储floatdouble,但是它可以隐式的存储整形。
附上代码:

de = l2;
de = ul2;
//double ——> float ——> 所有整形(有符号、无符号)
//decimal ——> 所有整形(无符号、有符号)
整数装浮点数

整形是不能隐式存储浮点数,因为整数不能存小数。
附上代码:

//i2 = f2;//error

特殊类型和其他类型之间

bool

bool没有办法和其他类型相互隐式转换。
附上代码:

bool bo2 = false;
char c2 = 'A';
string str2 = "123";

//bo2 = i2;//error
//bo2 = ui2;//error
//bo2 = f2;//error

//i2 = bo2;//error
//ui2 = bo2;//error
//f2 = bo2;//error

//bo2 = c2;//error
//c2 = bo2;//error
//bo2 = str2;//error
//str2 = bo2;//error
char

char没有办法隐式的存储其他类型的变量。
附上代码:

//c2 = i2;//error
//c2 = f2;//error
//c2 = ui2;//error
//c2 = str2;//error

但是,char类型可以隐式的转换成整形和浮点型。
原因如下:char可以隐式转为整形,其实是转为了int类型,所以对于short、byte等存储范围小于int 类型,无法表现为隐式转换。
char隐式转换成数值类型时,对应的数字,其实是一个ASCII码。
计算机里面存储2进制。
字符、中文、英文、标点符号,在计算机中都是一个数字。
一个字符对应一个数字,ASCII码就是一种对应关系。
附上代码:

i2 = c2;
f2 = c2;
ui2 = c2;

//str2 = c2;//error
string

string类型无法和其他类型进行隐式转换。
附上代码:

//i2 = str2;//error
//ui2 = str2;//error
//f2 = str2;//error

总结

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不背完3500个考研英语词汇不改名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值