计算机中数据类型的转换分为隐式转换和显示转换。这里先说说隐式转换。
隐式转换不需要做任何工作,例如var1=var2,如果var2的类型可以隐式转换为var1的类型,这个赋值语句就蕴含一个隐式转换。
这里有一个隐式转换的规则:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。如果不符合这个规则也仍希望转换,则可以用显示转换实现。
这里便涉及一个取值范围的问题。我们首先引入数据类型,如下表:
有符号的数据用二进制表示时,首位字符为符号位,0代表正,1代表负。
他们的取值范围对应的为:
bool和string没有隐式转换数值类型才有隐式转换,而char存储的是数值,所以char以可以当做一个数值类型。相应的知道,byte可以隐式的转换为(short,ushort,int,unit,long,ulong,float,double,decimal),为什么byte不能显示转换为char没有想明白~~~。类似的转换可以自己依照规则得来。这里还需要注意的一点是,虽然decimal的位数比double多,但是因为double的精度低,使其表示的范围大,而decimal则用了较多的位来表示精度,其范围相应的变小了。代码中时无法将double和decimal之间相互做隐式转换的,这点要牢记(我也没搞懂为啥~~)
下节介绍显示转换。
附带:
关于原码反码,补码的概念,不知道看此篇文章的你是否熟悉。正数的原码、反码、补码都一样。关于负数,反码是将原码除符号位外所有位取反,补码是将其反码加1。
关于+0和-0的分别表示,统一用8位来作为例子演示:
可以看出只有用补码表示时,+0与-0是没有区别的。