隐式类型转换 & 算术转换

admin2024-07-05  17

目录

整型提升

间接证明整型提升的代码案例

算术转换 


整型提升

何为整型提升:

整型提升的意义:

如何进行整型提升呢? 

代码举例:

#include<stdio.h>
int main()
{
	char c1 = 5;
	char c2 = 127;

	char c3 = c1 + c2;
	printf("%d\n", c3);

	return 0;
}

c3以%d的形式打印的结果为多少呢,以及c1和c2在相加时是如何整型提升的呢?

代码分析:

隐式类型转换 &amp; 算术转换,第1张

隐式类型转换 &amp; 算术转换,第2张

 隐式类型转换 &amp; 算术转换,第3张

隐式类型转换 &amp; 算术转换,第4张

隐式类型转换 &amp; 算术转换,第5张

c3的二进制原码转换为十进制为:1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6 = 124

且c3的最高位(符号位)为1,所以c3以%d的形式打印的结果为:-124 

代码验证: 

隐式类型转换 &amp; 算术转换,第6张



间接证明整型提升的代码案例

代码案例1:

#include<stdio.h>
int main()
{
	char a = 0xb6;
	short b = 0xb600; 
	int c = 0xb6000000; 

	if (a == 0xb6)
		printf("a");

	if(b == 0xb600)
		printf("b");

	if(c == 0xb6000000)
		printf("c");
	
	return 0;
}

代码验证:

隐式类型转换 &amp; 算术转换,第7张


 代码案例2:

#include<stdio.h>
int main()
{
	char c = 1;

	printf("%u\n", sizeof(c));
	printf("%u\n", sizeof(+c));
	printf("%u\n", sizeof(-c));

	return 0;
}

代码验证: 

隐式类型转换 &amp; 算术转换,第8张


算术转换 

何为算术转换?

举例说明: 

	double d = 3.14159;
	int n = 10;

	d + n;

double类型的dint类型的n 算术运算时,就会把 int类型的n 向上转换为 double类型 再进行运算

注意:只是在运算时把 int类型的n 向上转换为 double类型 ,并不会改变n的类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!