//什么是类型转换
//不同变量类型之间的互相转换
//隐式转换是什么 不同类型之间彼此自动转换
//规则 大范围装小范围
//有符号 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类型无法和其他类型进行隐式转换
C# 隐式转换 #我的编程语言学习笔记
于 2023-08-31 14:24:50 首次发布