The type promotion rules (类型提升规则,以及类型转换规则)


int main(int argc, char *argv[])
{
//  printf(" %d ", sizeof 65);
	printf(" %d ", sizeof 'A');

	system("pause");
	return 0;
}

 

 Type conversions in C are much more widespread than is generally realized. They can also occur in

    any expression that involves a type smaller than int or double. Take the following code, for  example:

如上代码,输出可能是1 可能是4,如果'A' 字面意思 那么就是char,而'A' 的ASCII 是 65是一个int ,所以输出

在不同额编译器下输出不同,这就是类型提升,此例中char类型被提升为int类型,GCC下输出4,VS输出1

 

规则如下:

141159_YOkI_1391394.png

又如

 

正负转换:


int main(int argc, char *argv[])
{
 
	char a, b, c;
	a = 'a';
	b = 'b';
	c = a + b;


	//195=11000011
	//  00111101

	cout << (int)(char)(0xc3);
	 
	system("pause");
	return 0;
}

由于+运算,根据提升 规则char被提升为int 结果就是int 的195,195=0xc3 被赋值给char 11000011 取反加一 变为00111101加上负号,其结果为-61,同理


int main(int argc, char *argv[])
{
	cout <<( int) ( char)(0xff) ;
	return 0;
}

 

转换为char 后 取反加一 为 0000001 加上负号输出-1

 

 

小字节转换为大字节:高位补0,

大字节转换为小字节:截断

int main(int argc, char *argv[])
{
 	cout << (int)(char)(0xff)<<endl;
	cout << (int)(char)(0x7fff) << endl;
	cout <<(int) (char)(int)(0x7fff) << endl;
	return 0;
}

 

 

Tip:强制转换内存实际数据不变 具体表现出来的值按照目标数据类型规则来算

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/685973

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值