c#中存在14中变量类型
但是c#作为一种强类型的语言,在定义变量时候就必须明确类型,有时使用时需要对不同的数据类型,进行变量类型之间的转换
对于这c#种的14种变量类型之间的互相转换,主要存在两种转换
1.隐式转换 :表示可以在不同变量类型之间会自动转换
2.显示转换 :需要通过代码设置,才能进行不同变量类型之间的互相
隐式转换基本规则
- 不同变量类型之间自动转换
大范围装小范围 — 涉及知识点,变量的存储范围 大范围的变量类型可以隐式转换为小范围类型
有符号 long >int >short >sbyte
无符号 ulong >uint >ushort >byte
浮点数 decimal类型 没办法用隐式转换的形式去存储 double 和float
double > float
特殊类型 bool char string 无联系不能隐式转换
- 不同变量大类型之间的转换
无符号,有符号之间 必须遵循:大范围全部包括小范围
所以有符号变量一定不能隐式转换为无符号变量(无符号不包含负数)
无符号可以转换为有符号变量 short>byte int>ushort>byte long>uint>ushort>byte
- 浮点数和整数(有符号和无符号)之间
浮点数是可以装载任何类型的整数(decimal,double,float)
整数不能隐式转换为浮点数
- 特殊类型
bool类型 不能和其他类型互相隐式转换
char类型 可以隐式的转换 整型和浮点型(字符所对应的ASCII码值) ,不可以隐式存储其他类型的变量
string类型 无法和其他类型进行隐式转换
显式转换基本规则
- 括号强转 将高精度的类型强制转换为低精度
//语法 :变量类型 变量名 = (变量类型)变量;
int s = 1;
short i = 1 ;
i =(short)s;
括号强制转换,可能会出现范围问题(范围越界,符号位)或精度问题(精度丢失),造成异常
整型之间,考虑范围问题异常
浮点型之间,会导致精度问题 ,
例如 float f = (float)d double,d比f多的的小数位会缺失导致精度问题(不会四舍五入)
无符号和有符号,同理范围会出现问题 符号位会导致 转换异常
浮点和整形,同浮点型之间 导致精度问题,丢失小数后的位数(不会四舍五入)
char和数值类型 在范围内允许强制转换 (char)int
bool和string 无法通过括号强转
- Parse法 把字符串类型转换为对应类型的方法
//语法: 变量类型.Parse("字符串");
int i = int.Parse("123");
sbyte i = sbyte.Parse("1");
int.Parse("1");
short.Parse("1");
long.Parse("1");
//......
字符串必须要能够转成对应类型,否则会报错
int i = int.Parse("12.3"); //--->报错
float i = float.Parse("12.3"); // 不会报错
字符串转成对应类型的范围也一定要在范围之内
- Convert法 更准确的将,将各个类型之间进行互相转换 填写的变量或常量必须为正确
语法:Convert.To目标类型(变量或者常量);
int a = Convert.ToInt32("12");
sbyte sb = Convert.ToSByte("1");
short = ToInt16; long =ToInt64;
byte = ToByte; uShort =ToUInt16; ulong = ToUInt64;
float = ToSingle; double = ToDouble; decimal = ToDecimal;
bool = ToBoolean;
string = ToString; char = ToChar;
Convert转换精度 比括号强转精度更高,会进行四舍五入
//bool类型转int
int a =Convert.ToInt32(true);
a = 1;
true = 1;
false = 0;
- 其他类型转string 拼接打印
//语法: 变量.ToString();
string str = 100.ToString();
可以把任何类型的变量通过ToString方法转换为 字符串