2006-01-25
VisualC++6.0中,教材上说+ - * /运算的两个数中,只要有一个是float型,都将转变为double型,并且运算结果为double型。但是我把一个整型数据和一个浮点型数据相加,然后用sizeof测算结果的数据长度,却为4个字节,我们知道在VisualC++6.0中double型占8个字节,显然得到的结果不是double型的。是否是教材上有错呢?高人指点
教材没错。
你用sizeof运算是得不到正确结果的。因为编译器不会真的去查找内存,然后告诉你数据长度,而是根据一些预设规则直接给出答案。比如:
float aa=1。0;
int bb=1;
sizeof(aa+bb);
编译后,对于sizeof(aa+bb)这个语句,编译器直接返回两个操作数中较大类型的数据长度,而不是像你认为的那样先计算aa+bb,然后保存结果,最后返回结果的数据长度。
那么怎样能知道aa+bb默认情况下返回什么类型呢?这个问题不是非常容易的,需要一点汇编方面的知识,我就不具体讲了,只提一点,如果你以后掌握了汇编原理,可以自己实验一下:
float aa=1。 0...全部
教材没错。
你用sizeof运算是得不到正确结果的。因为编译器不会真的去查找内存,然后告诉你数据长度,而是根据一些预设规则直接给出答案。比如:
float aa=1。0;
int bb=1;
sizeof(aa+bb);
编译后,对于sizeof(aa+bb)这个语句,编译器直接返回两个操作数中较大类型的数据长度,而不是像你认为的那样先计算aa+bb,然后保存结果,最后返回结果的数据长度。
那么怎样能知道aa+bb默认情况下返回什么类型呢?这个问题不是非常容易的,需要一点汇编方面的知识,我就不具体讲了,只提一点,如果你以后掌握了汇编原理,可以自己实验一下:
float aa=1。
0;
int bb =1;
printf("%2。1f",bb+aa);
这段代码编译并反汇编后,可以看到弹出一个qword,而不是dword,因此证明默认情况下编译器按照double型处理。
。收起