一般形式:(类型名)(表达式) 例:
double x = 2.1, y-= 1.2; (int)(x +y); //3 (int)x + y; //3.200000 (double)(3 / 2); //1.000000 (int)3.6; //3不同数据类型数据混合运算,先转换为同一类型(转换按数据长度增加的方向进行,以保证精度不降低。),再进行运算; 数据类型级别(从低到高排列): char<short<unsigned short<int<unsigned int<long<unsigned long<float<double
#include <stdio.h> void foo(void) { int a = -20; unsigned int b = 2; (a+b>0)? puts(">0"):puts("<0"); //输出>0 } int main() { foo(); return 0; }赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边变量量的类型。(注:赋值号左边只能是变量) A.小数据赋给大变量 不会造成数据丢失,系统为了保证数据的完整性,还提供了符号扩充行为(若符号位为0,高位全部补0;若符号位为1.高位全部补1)。
#include <stdio.h> int main() { char a = 0xff; //1111 1111 a = 0x7f 注意:十六进制不能表示正负的 int b = a; //1111 1111 1111 1111 1111 1111 1111 1111 printf("%d\n", b); return 0; }B.大数据赋给小变量 会发生截断行为,造成数据丢失。
#include <stdio.h> int main() { int a = 0xff; //255 char b = a; //-1 printf("%d\n", b); return 0; } ``输出的转换成指定的输出格式 输出类型转换规则: A.printf把char、short提升为int型,在传给printf B.float提升到double类型再传给printf
#include <stdio.h> int main() { char b = 0xff; //b = 0x8f 输出ffffff82 符号扩充输出 printf("%x\n", b); //输出fffffff return 0; }函数实参和形参类型需保持一致不做讨论。一般函数的形参和函数返回值类型不一致,函数形参的类型会转为函数返回值的类型。
#include <stdio.h> int foo(double x, double y) { return x + y; } int main() { double x = 2.1, y = 1.2; //printf("%lf\n", foo(x, y)); 警告 输出0.000000 printf("%d\n", foo (x, y)); //3 return 0; }运行结果:255
strlen函数返回的是字符串的个数,不包括’\0’结束符。
运行结果: 1 -1 -1