1.自动类型转换
转换时按以下规则进行:
2.强制类型转换
#include <stdio.h>
int main(void) {
unsigned long a = 4294967295UL;//max value
unsigned long b = 2UL;
float mean1 = 0;
double mean2 = 0;
mean1 = (float)a/(float)b;
mean2 = (double)a/(double)b;
printf("mean1: %f, mean2: %f\n", mean1, mean2);
float f = (float)a;
double d = (double)a;
printf("f: %f, d: %f\n", f, d);
return 0;
}
输出:
mean1: 2147483648.000000, mean2: 2147483647.500000
f: 4294967296.000000, d: 4294967295.000000
可以看到unsigned long转化为float是会出错的,正确做法是转换为double。