数据类型转换

类型转换:1、显式转换  2、隐式转换

int a=(int)12.5;(显式转换)             int a='a'+1-12.5*2;(隐式转换)

1、窄的数据类型变宽的数据类型

2、同类型的无符号比有符号宽(不同类型比较要转成相同类型的)

3、整型起(整型是运算的起点)

4、最终的数据类型以赋值符号左边为准

int main()
{
	//char a = 'a'+'b';
	char a = -1;  //-1
	char b = 255;//-1
	unsigned char c = -1;//255
	unsigned char d = 255;//255
	int e = a;//-1
	int f = b;//-1
	int g = c;//255
	int h = d;//255
	unsigned int i = a;//
	unsigned int j = b;//
	unsigned int k = c;//255
	unsigned int x = d;//255
	printf("%d,%d,%d,%d\n",e,f,g,h);
	printf("%u,%u,%u,%u\n",i,j,k,x);

	return 0;
}

数据类型转换的本质原因

1、窄变宽:左边补符号位(有符号位)没有符号位补0 右边补0

int main()
{
	char a = -1;                    //1111 1111
	char b = 1;                      //0000 0001
	unsigned char c = 1;      //0000 0001
	unsigned char d = 255; //1111 1111
	int e = a;//-1          11111111 11111111 11111111 11111111(有符号位补符号位1)
	printf("%d,%x\n",e,e);
	e = b;//1            00000000 00000000 00000000  00000001
	printf("%d,%x\n",e,e);
	e = c;//1            00000000 00000000 00000000  00000001
	printf("%d,%x\n",e,e);
	e = d;//255          00000000 00000000 00000000  11111111(无符号位补0)
	printf("%d,%x\n",e,e);
	return 0;
}

2、宽变窄:保留低数据

int main()
{
	int a = 0x12345678;
	int b = 0xff347890;
	char c = a;//0x78  保留一个字节
	char d = b;//0x90   1001 0000 有符号位,取反加一  0111 0000   -112
	printf("%d,%x\n",c,c);
	printf("%d,%x\n",d,d);

	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值