// 数据类型的转换.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
int main1(int argc, char* argv[])
{
printf("%d\n",12.1); //数据解析不正确导致数据有误
//printf不自动转换按照 整数类型解析
printf("%d\n",(int)12.1); //数据解析不正确导致数据有误
printf("%f\n",10);//0.000000
printf("%f\n",(float)10);//10.000000
//printf不自动转换按照 浮点类型解析导致数据不正确
return 0;
}
void main2()
{
//只有在不同数据类型进行运算才会进行隐式的类型转换
char ch='A';
printf("%d\n",ch); //打印ASCII码对应的整数
printf("%d\n",sizeof(ch));//char 类型就占一个字节
printf("%d\n",sizeof(1)); //1为一个int类型的整数在内存中占4个字节
printf("%d\n",sizeof(ch+1));//ch+1 最大就是int型的所以就占4个字节进行隐式转换
printf("%d\n",sizeof(1.0));//1.0为一个double类型的所以在内存中占8个字节
printf("%d\n",sizeof(ch+1.0));//ch+1.0 而1.0为double隐式转换取最大的类型就取double的8个字节
//隐式就是自动类型转换
}
void main3()
{
//强制类型转换
float a1=10.8f;
float a2=10.3f;
int num=a1+a2; //21 先进行浮点数的相加21.1然后赋值号会进行转换成整形 就是21
int num1=(int)a1+a2; //20 强制类型转换优先级比较高所以会先取整然后相加赋值号再去取整得到20
int num2=(int)(a1+a2);//21 小括号优先级大于强制类型转换所以相浮点数相加赋值号再去取整得到21
printf("%d,%d,%d\n",num,num1,num2);
}
void main4()
{
double db=3; //赋值号就进行类型的隐式转换
printf("%d\n",db);//db转换成double然后就又按照%d输出其实是0 因为double就是一个浮点数
printf("%f\n",db);
printf("%d\n",12.1); //数据解析不正确导致数据有误
//小数如果以0结尾%d输出的浮点数就为0
int num=6.7;//6.7赋值号进行类型的隐式的转换
printf("%f\n",num);//0.000000 而6就会按照%f解析输出就是0.00000
}
void main5()
{
double db=4.5;
double db1=14.5;
int num=(int)db; //(int)可加可不加软件工程规范
printf("%f,%d\n",db,num);
//强制类型转换CPU寄存器中进行转换内存中的数值是不会改变的
int num1=(int)db1;
printf("%f,%d\n",db1,num1);
}
void main()
{
//大数据赋值给小数据出现了溢出
unsigned char num;
//0-255
int num1=256;
num=num1; //数据溢出了
printf("爹给你%d元,你有%d元\n",num1,num);
}
转载请注明原文地址: https://ju.6miu.com/read-1299812.html