简明数据类型指南
勿以小杯盛大物
赋值时要保证值的类型与保存它的变量类型相匹配。
不同数据类型的大小不同,千万别让值的大小超过变
量。
short 比 int 的空间小, int 又比 long 小。所以下面的代码是可行的。
short x = 15;
int y = x;
printf("y 的值是 %i\n", y);
但是反过来,比如你想在 short 变量中保存 int 值,就
不行。
int x = 100000;
short y = x;
print("y 的值是 %hi\n", y); //%hi用来格式化
有时,编译器能发现你想在小变量中保存大值,
然后给出一条警告,但大多数情况下编译器不会
发现。
这时当你运行代码,计算机无法在 short
变量中保存100 000。计算机能装多少0、1就装多
少,而最终
保存在变量 y 中的数字已面目全非。
使用类型转换把float值存进整型变量
int x = 7;
int y = 2;
//float z = x / y;
//printf("z = %f\n", z);
float z = (float)x / (float)y;
printf("z = %f\n", z);
因为 x 和 y 都是整型,而两个整型相除,
结果是一个舍入的整数,在这个例子中z= 3 。
如果希望两个整数
相除的结果
是浮点数,应该先把整数保存到 float 变量
中,做法就是使用类型转换临时转换数值的类型。
(float) x会把 int 值转换为 float 值,计算时就可以把变量当成浮点数来
用。
事实上,如果编译器发现有整数在加、减、乘、除浮点数,会自动替
你完成转换,因此可以减少代码中显式类型转换的次数:
float z = (float)x / y; // y会被编译器自动转换成float
数据类型前的关键字
unsigned
用unsigned修饰的数值只能是非负数。由于无需记录
负数,无符号数有更多的位可以使用,因此它可以保
存更大的数。unsigned int可以保存0到最大值的数。
这个最大值是int可以保存最大值的两倍左右。还有
signed关键字,但你几乎从没见过,因为所有数据类型
默认都是有符号的。
unsigned char c; // 保存0到255的数
long
你可以在数据类型前加long,让它变长。long
int是加长版的int;long int可以保存范围更广的数
字;
long long比long更长;还可以对浮点数用long。
long double d;
long long l; //注意:只有C99和C11标准支持long long。
代码示例:
# include <stdio.h>
float total = 0.0;
short count = 0;
short tax_percent = 6;
float add_with_tax(float f) {
float tax_rate = 1 + tax_percent/100.0; // 有了.0,计算就会以浮点数进行,否则表达式会返回整数