类型转换

1、运算时,自动类型转换

#include<stdio.h>

void main(){
	char c = 'a';
	short s = 1;
	int i = 10;
	float f = 100.00;
	double d = 1000.0000;
	//运算时,自动类型转换 
	printf("\n 字节%d,值为 %d",sizeof(c+s),c+s); //默认char =>int  short => int 字节数是4
	printf("\n 字节%d,值为 %d", sizeof(c + i),c + i);//默认char => int  字节数是4
	printf("\n 字节%d,值为 %f", sizeof(s + f),s + f); ////默认short =>float 字节数是4
	printf("\n 字节%d,值为 %f", sizeof(i + f),i + f); //默认int =>float 字节数是4
	printf("\n 字节%d,值为 %f", sizeof(i + d),i + d); //默认int =>double 字节数是8
	printf("\n 字节%d,值为 %f",sizeof(f + d),f + d);//默认int =>double 字节数是8

	//数值比较大时,有符号回向无符号转换
	unsigned int ui = 2147483647u; //u表示无符号常量  有符号范围是0-2147483647
	printf("\n 字节%d,无符号值为 %u,有符号值为%d", sizeof(i + ui), i + ui, i + ui);
	//字节4,无符号值为 2147483657,有符号值为-2147483639 ,无符号可以正常显示,有符号越界了。
//%d 有符号输出十进制整数 对应于int
//%u 无符号输出十进制整数 对应于 unsigned int getchar(); }

 2、赋值时,自动类型转换

 

#include<stdio.h>

void main(){
	//赋值时,自动类型转换
	char c = 'a';  //在赋值的时候已经进行的自动类型转换,成了char类型  int =>char
	short s = 1;   //在赋值的时候已经进行的自动类型转换,成了short类型  int =>short
	int i = 10.0;  //在赋值的时候已经进行的自动类型转换,成了int类型  double =>int
	float f = 100.00; //在赋值的时候已经进行的自动类型转换,成了float类型  double =>float
	double d = 1000.0000;

	printf("%d, %d\n", sizeof('a'), sizeof(c)); 
	//'a'字符保存的是它的ASCII码值,65,是整数类型,4个字节;而c在赋值的时候已经进行的自动类型转换,成了char类型,1个字节
	printf("%d, %d\n", sizeof(1), sizeof(s)); 
	//1是整数类型,4个字节;而s在赋值的时候已经进行的自动类型转换,成了short类型,2个字节
	printf("%d, %d\n", sizeof(10.0), sizeof(i)); 
	//10.0是double类型,8个字节;而i在赋值的时候已经进行的自动类型转换,成了int类型,4个字节
	printf("%d, %d\n", sizeof(100.00), sizeof(f)); 
	//100.00是double类型,8个字节;而c在赋值的时候已经进行的自动类型转换,成了float类型,4个字节
	printf("%d, %d\n", sizeof(1000.00), sizeof(d)); //

	getchar();

}

 3、强制类型转换

#include<stdio.h>

void main(){
	printf("%d\n",1.0);  //%d输出整数,因为1.0是double类型,把double类型按照整数类型解析,所以无法输出1.0
	printf("%d\n", (int)1.0);  //%d输出整数,强制类型转换成int, 输出1

	printf("%f\n", 1);  //%f输出浮点数,因为1是int类型的,所以无法输出1
	printf("%f\n", (float)1);  //%d输出浮点数,强制类型转换成float, 输出1.000

	int i = 3.6; //double的3.6赋值给int 类型的变量会出现精度损失
	printf("%d\n", i);  //输出3

	getchar();
}

 4、数据溢出

#include<stdio.h>
#include<limits.h>
void main(){
	unsigned char ch = 255;
	printf("%d\n",UCHAR_MAX);

	int i = 256;
	ch = i;   //赋值越界
	printf("%d\n",ch); //输出0

	/*
	   解释:
	   因为  char 是8位
	   255        1111 1111     
						+1 
				1  0000 0000
	而char只有8个位的存储空间,所以截取后8位的0,前面的进位1就丢掉,溢出了,所以输出0
	*/
	getchar();
}

 

posted @ 2019-07-21 12:18  Coding_Changes_LIfe  阅读(154)  评论(0编辑  收藏  举报