文档介绍:类型转换
隐式类型转换
整型、 实型和字符型数据之间能够混合运算。 比如:
10 + ’a’ + - * ’b’
不一样数据类型之间运算会进行自动类型转换
强制类型转换
通常形式: (类型名)(表示式)
例 (int)(x + y)
(int)x + y
(double)(3/2)
(int)
说明: 强制转换得到所需类型中间变量, 原变量类型、 变量值保持不变
较高类型向较低类型转换时可能发生精度损失问题
#include <>
main()
{
float x;
int i;
x=;
i=(int)x;
printf(“x=%f,i=%d”,x,i);
}
结果: x=,i=3
类型间转换
比如
int a = ;
printf("%d",a);
这么赋值后, 输出变量a值并非预期, 而是-, 原因是超出了int类型能够装载最大值, 数据产生了溢出。 假如换一个输出格式控制符, 代码以下所表示:
printf("%u",a);
输出结果就是变量a值, 原因是%u是根据无符号整型输出数据, 而无符号整型数据范围上限大于这个值。
当把占字节较小数据赋值给占字节较大数据时, 可能出现以下两种情况。
第1种情况, 当字节较大数是无符号数时, 转换时新扩充位被填充成0
char b = 10;
unsigned short a = b;
printf("%u",a);
这么赋值后, 变量a中输出值是10
当字节较大数是有符号数时, 转换时新扩充位被填充成符号位
char b = 255;
short a = b;
printf("%d",a);
这么赋值后, 变量a输出值是-1, 变量a扩充高8位, 依据变量b最高位1全部被填充成了1, 所以数值由正数变成了负数, 因为变量a最高位符号位是1, 至于为何16个1表示是-1, 包含到二进制数原码和补码问题
操作符分类
运算符优先级
数据类型
初学者数组类型三大难题
问题引出
数组类型
数组指针
数组类型和数组指针关系
数据类型本质
从编译器和内存角度了解数据类型:
Int a 告诉C编译器给我分配四个字节内存。
1、 数据类型本质: 可了解为创建变量模具, 是固定大小内存别名。
2、 数据类型作用:
3、 求数据类型大小: sizeof()
注意: sizeof()是操作符(单目运算符), 不是函数。 Sizeof测量实体大小在编译期间就已经确定
4、 数据类型能够有别名
typedef uu int;
sizeof(uu)=sizeof(int);
sizeof()
sizeof含义:
sizeof是C语言一个单目操作符, 如C语言其它操作符++、 --等。 它并不是函数。 sizeof操作符以字节形式给出了其操作数存放大小。 操作数能够是一个表示式或括在括号内类型名。 操作数存放大小由操作数类型决定。
Sizeof使用方法:
用于数据类型
数据类型必需用括号括住。 如sizeof(int)
用于变量
sizeof使用形式: sizeof(var_name)或sizeof var_name 
注意: sizeof操作符不能用于函数类型, 不完全类型或位字段。 不完全类型指含有未知存放大小数据类型, 如未知存放大小数组类型、 未知内容结构或联合类型、 void类型
3、 sizeof结果 
sizeof操作符结果类型是size_t, 它在头文件<>中typedef为unsigned int类型。 该类型确保能容纳实现所建立最大对象字节大小。  
1、 若操作数含有类型char、 unsigned char或signed char, 其结果等于1。  
ANSI C正式要求字符类型为1字节。  
2、 int、 unsigned int 、 short int、 unsigned short 、 long int 、 unsigned long 、 float、 double、 long double类型sizeof 在ANSI C中没有具体要求, 大小依靠于实现, 通常可能分别为2、 2、 2、 2、 4、 4、 4、 8、 10。  
3、 当操作数是指针时, size