• 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

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

  • 相关阅读:
    软件工程之总体设计
    基于Freertos的ESP-IDF开发——8.ESP-Rainmaker 官方例程移植
    JS高级(四):正则表达式、常见的特殊字符、案例、预定义类、正则替换
    ZHOJ_#20952. 最大公约数_数论
    2022-01-20-MySQL数据库
    抽象工厂
    ElementuiPlus的table组件实现行拖动与列拖动
    论文解读:ToxinPred2:一种预测蛋白质毒性的改进方法
    新能源汽车行业资讯-2022-9-16
    JAVA知识——JAVA基础
  • 原文地址:https://blog.csdn.net/GUDGET/article/details/127894375