类型转换通用指导原则:
1、为防止精度损失,如果必要的话,类型总是被提升为较宽的类型。
2、所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。
1、下面程序的结果是多少?
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<conio.h>
using namespace std;
int main()
{
float a=1.0f;
cout << (int)a << endl;
cout << &a << endl;
cout << (int&)a << endl;
cout << boolalpha << ((int)a == (int&)a) <<endl;
float b =0.0f;
cout << (int)b << endl;
cout << &b << endl;
cout << (int&)b << endl;
cout << boolalpha << ((int)b == (int&)b) <<endl;
return 0;
}
解析:记住浮点数在内存里和整数的存储方式是不同的,(int&)a 相当于将该浮点数地址开始的 sizeof(int)个字节当成int型的数据输出,因此这取决于 float 型数据在内存中的存储方式,而不是经过(int&)a显示转换的结果。
2、下面程序的结果是什么?
#include<stdio.h>
int main()
{
unsigned int a = 0xFFFFFFF7;
unsigned char i = (unsigned char)a; //高于3位和 3位的将被程序自动丢弃
char* b = (char*)&a;//使 b 也指向 a
printf("%08x, %08x", i, *b);
return 0;
}