binzhouweichao@163.com
今天开始学习C#windows窗体界面设计。
首先说一下类型转换。
参考http://www.csharpwin.com/csharpspace/6848r2307.shtml
以int和double为例。
int类型的数据可以隐式转换成double类型,无须特别说明。
double类型需要强制显式转换成int类型,需要加强制转换关键字。
可以这样认为,隐式转换的标准是不能丢失数据;强制显式转换是因为在丢失数据的可能性下进行操作的。
这里的int为int32,占4个字节的内存单元;double为双精度,占8个字节的内存单元。
如:
int a;
double b;
a = 2;
b = a;//隐式转换,等效于b = (int)a;
将int类型的a隐式转换成double类型,再赋值给b。
反过来:
int a;
double b;
b = 2.5;
a = (int)b;//强制转换,不能省略
将double类型的b强制显式转换成int类型,再赋值给a。
经典题目:(int)((double)(5/2)+2.5)的值
顺序为先运算括号里面的,再运算括号外面的;同级括号优先级为从右到左。
先看(double)(5/2),从右到左,5与2均为int型,故5/2的结果为int型,即为2;将2强制转换成double,还是2(这个是double的2,占8个字节,不是int的2);(double)2+2.5 = 4.5;(int)4.5 = 4。
再看简单点的。
2+2.5=?
答案是4.5。2为int32,2.5为double。为避免丢失数据,结果以精度高的为准,也就是隐式转换的原则。
那么,5 / 2=?
答案是2。因为5是int32,2也是int32,结果类型与这两个数的类型一致。
所以上面的题目中,把double去掉,结果还是一样的。而加了double,并不能将5/2的值变成2.5。因为在运算时,为5/2的结果开辟的内存为int32,小数部分数据已经放弃,即使再加double,也只能在尾部添加0。如果改成(double)5/2,结果就是2.5了。
5 / 2.1=?
答案肯定不是2。2.1为double类型,5为int32类型,结果以double为准,验证可得结果为2.38095......