• 4.构造类型,类型转换


    构造类型

    由若干各个相同或不同类型的数据构成的集合,这种集合类型被称为构造类型
    例:int a[10];
    数组、结构体、共用体、枚举

    类型转换

    数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型转换的问题。
    转换的方式有两种:
    自动转换:遵循一定的规则由编译系统自动完成。
    强制类型转换:把表达式的运算结果强制转换成所欲的数据类型。

    自动转换的原则:
    1.占用内存字节数少的类型,像占用内存字节数多的类型转换,以保证精度不降低。
    2.转换方向:在这里插入图片描述

    自动类型转换

    1.当表达式中出现了char , short int , int 类型中的一种或者多种,没有其它类型了
    参加运算的成员全部变成 int 类型的参加运算,结果也是int类型

    #include
    int main(int argc,char *argv[])
    {
    	printf("%d\n", 5 / 2);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    2.当表达式中出现了带小数的实数,参加运算的成员全部变成double类型的参加运算,结果也是double型。

    int main(int argc, char* argv[])
    {
    	printf("%f\n", 5.0 / 2);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    3.当表达式中有有符号数,也有无符号数,参加运算的成员变成无符号数参加运算结果也是无符号数。(表达式中无实数)

    #include
    int main(int argc, char* argv[])
    {
    	int a = -8;
    	unsigned int b = 7;
    	if (a + b > 0)
    	{
    		printf("a+b>0\n");
    	}
    	else if (a + b < 0)
    	{
    		printf("a-b<0\n");
    	}
    	else
    	{
    		printf("a+b=0\n");
    	}
    	printf("%x\n", (a + b));
    	printf("%d\n", (a + b));
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    4.在赋值语句中等号右边的类型自动转换为等号左边的类型。

    #include
    int main()
    {
    	int a;
    	float f = 5.8f;
    	a = f;
    	printf("a=%d\n", a);
    	printf("f=%f\n", f);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    5.注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型

    强制类型转换

    强制转换:通过类型转换运算实现
    (类型说明符)(表达式)
    功能:把表达式的运算结果强制转换成类型说明符所表示的类型

    例如:(float) a ; //把a的值转换为浮点型
    (int) (x+y) ; //把x+y的结果值转换为整型
    注意:类型说明符必须加括号

    #include
    int main()
    {
    	float x = 0;
    	int i = 0;
    	x = 3.6f;
    	i = (int)x;
    	printf("i=%d\n",i);
    	printf("x=%f\n",x);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    说明:
    无论是强制转换或是自动转换,都是为了本次运算的需要,而对变量的数据长度进行的临时性转换,而不改变数据定义的类型以及它的值。

  • 相关阅读:
    SpringMVC的请求处理
    java毕业设计校园二手书交易平台源码+lw文档+mybatis+系统+mysql数据库+调试
    【C++】构造函数详解
    leetcode 1770. Maximum Score from Performing Multiplication Operations(乘积的最大分数)
    Flutter 环境变量配置和flutter doctor中的错误解决
    android自定义View: 饼状图绘制(四)
    Json字符串转换小工具
    获取并导入Mybtis源码到Idea &&HSQLDB数据库简介
    C++内存管理
    期权开户流程、交易时间和规则详解清晰易懂
  • 原文地址:https://blog.csdn.net/GUDGET/article/details/127894375