1.自动类型转换
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdint.h>
int main() {
//1.隐式 算术转换
// 进行运算时,不同类型的数据必须转换成同一种类型才能运算
// 以表达式中 最长类型为主 ,将其它的类型转为该类型
int a = 10;
double b = 3.14;
printf("a+b=%lf\n", a + b);//a+b=13.140000
printf("a+b=%d\n", a + b); // 不正常 a+b=343597384
// char ch = 'a';
// printf("ch=%d\n", ch + a);//107
// //问题
// printf("%lf", 12 / 3);//0.000000 不正常 ********
// printf("%lf", 12 / 3.0);//4.000000 对的
// //2.赋值操作
// // 赋值符号 右边转成左边的类型 再赋值
// char c = 'b';
// int i, res;
// i = 2;
// double d = 1.5;
// //float m = 1.20000; //初始化”: 从“double”到“float”截断
// float m = 1.20000f;
//
// printf("c=%d\n", c);//98
// //printf("c=%f\n", c);//c=0.000000 占位符和类型不符 (没有float)
// printf("c=%lf\n", c);//0.000000
//
// res = c / i + (d * m);// 98/2 =49 1.5*1.2=1.80000 49+1.8000 50
//
// printf("res=%d\n", res);//“double”转换到“int”,可能丢失数据
//
3.输出转换
//
// int a1 = 10;
// printf("%lf\n", a);//0.000000
//
// float b1 = 9.003f;
// printf("%d\n", b1);
//------ ascII 表中 字符对应的数字 最大才是127
int c1 = 100;
//char d1 = (char)(c1 + 2);
//printf("d1=%c", d1);//f
char d1 = (char)c1 + 2;
printf("d1=%c %d", d1,d1);//d1=f 102
int c2= 200; // 超过 127就出问题 ********
char d2 = (char)(c2);
printf("d2=%c\n", d2);//?
//int8_t aa = -18;
//aa = aa >>3;
// printf("%d\ %#x\n", aa, aa);//2 0x2
// printf("请输入一个字符:");
// char c;
// scanf("%c", &c);
// printf("%d\n", c);
}
/*
* int char double 字节小的向字节大的转
* char类型数据转换为int类型数据遵循ASCII码中的对应值.
* 自动转换 (隐式)
强制转换
格式 (数据类型)(表达式) 注意括号
*/
2.强制类型转换
基本格式:(数据类型)(表达式)
在使用强制转换时应注意以下问题:
- 数据类型和表达式都必须加括号, 如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。
- 转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。
- 强制转换后的运算结果不遵循四舍五入原则。