c语言-隐式类型转换,算数转换-创新互联

文章目录
  • 一.隐式类型转换
  • 二.算数转换

成都创新互联公司电话联系:18980820575,为您提供成都网站建设网页设计及定制高端网站建设服务,成都创新互联公司网页制作领域十载,包括成都玻璃贴膜等多个方面拥有丰富设计经验,选择成都创新互联公司,为企业锦上添花。一.隐式类型转换

1.隐式类型转换是通过整形提升方式来作用的,首先我们需要了解原码,反码,补码是怎么一回事.

原码,反码,补码:
1.正数的原码,反码,补码(三码相等),例如:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— 1的原码
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— 1的反码
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— 1的补码
2.负数的原码,反码,补码,例如:
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— -1的原码
//负数的原码符号位不变,其他位按位取反得到反码。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 —— -1的反码
//负数的反码加1得到补码。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 —— -1的补码
*计算机中的数据一律以补码形式存储

*补码转化到原码的形式有两种:
第一种:补码取反得到一串二进制序列(注意此序列不是反码)然后给此二进制序列加1得到原码。
第二种:补码减1得到反码再给反码取反得到原码。

对于在内存中所占字节小于int的数据,例如 char,short类型的数据,在进行加减时会进行隐形转换,转换成int类型的数据后再进行加减,下面我们来通过实例来体会一下隐式转换:

有符号整形提升符号位是几前面就添加几
无符号整形提升直接补0

int main()
{char a = 3;//有符号的a
	//00000000000000000000000000000011 -- 3的补码
	//截断
	//00000011 -- 截断后的a

	char b = 127;
	//00000000000000000000000001111111 -- 127的补码
	//截断
	//01111111 -- 截断后的b

	char c = a + b;
	//00000011 -- 截断后的a
	//01111111 -- 截断后的b
	//将截断后的a和b整型提升
	//00000000000000000000000000000011 -- 整形提升后的a
	//00000000000000000000000001111111 -- 整形提升后的b
	//00000000000000000000000010000010 -- a+b的结果
	//10000010 -- 再进行截断存储到c里面
	printf("%d\n", c); //此处c又会进行整形提升
	//11111111111111111111111110000010 - 补码
	//11111111111111111111111110000001 - 反码
	//10000000000000000000000001111110 - 原码
	//-126
	return 0;
}

下面这个例子也很好的体现出了整形提升。

int main()
{char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;
	if (a == 0xb6)//这里的a进行了整形提升所以a!=0xb6(10110110)
		printf("a");
	if (b == 0xb600)//同理
		printf("b");
	if (c == 0xb6000000)//这里由于c为int型所以不用整形提升,表达式成立输出c
		printf("c");
	return 0;
}

另外:
有符号的char的取值范围是:-128~127
无符号的char的取值范围是:0~255
如下图:

在这里插入图片描述

从这里我们可以直接看出上面代码的b(127)+a(3)的值为-126(顺时针走)

二.算数转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类
型,否则操作就无法进行。下面的层次体系称为寻常算术转换。

long double
double
float
unsigned long int
long int
unsigned int
int                //向上转化

例如这里是将a–>double,然后c的值为8.4
在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页名称:c语言-隐式类型转换,算数转换-创新互联
分享地址:http://scyanting.com/article/dggojh.html