C语言类型转换

隐式转换

、在算数运算式中,低类型转换为高类型

signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
  1. 同等位数的类型进行赋值时,不会改变在其内存的存储形式,所以第三行语句 c 的位存储形式还是0xe0
  2. 位扩展:当 a 和 c 进行比较的时候,由于两边都是char(位宽比int小的)型,所以要提升为 int 型;如果原始类型为 signed 进行符号位扩展,如果原始类型为 unsigned 要进行零扩展。
    例如: a 为 signed 型:0xe0 => 0x f f f f f f e0,
    c 为unsigned型:0xe0=>0x000000e0

二、 赋值表达式中,右边表达式的值会自动隐身转化为左边变量的类型;如果右
  边的精度大于左边可能会丢失一部分数据(按四舍五入进行取舍)
  
三、函数调用的参数传递:系统自动把实参类型转换为形参的类型,然后赋值给形
  参;如果函数有返回值,系统又自动将返回表达式的类型转换为返回值类型,
  赋值给调用参数;另外如果return的类型和函数返回值的类型不一致,则以函
  数的返回值类型为标准。函数的类型决定返回值的类型

自动转换

在运算表达式中:
shotr / char / unsigned char / unsigned short –> int –> unsigned int–> long –> unsigned long –> double <– float

有符号数和无符号数的转换

如果在表达式中既存在有符号类型也存在无符号类型,则所有的操作数转换为无符号的类型;某种意义上,无符号的优先级要高于有符号。

	unsigned int a = 20;
	signed int b = -20;
	printf("%u\n", b);

	if (a > b)
	{
		printf("a>b\n");
	}
	else
	{
		printf("a<b\n");
	}

b 和 a 比较的时候系统自动将 b 转换为无符号的一个特大的数,所以 b 大于 a ;
运行结果

强制类型转换:
	int a = 10;
	int b = 5;
	double c = (double)a / b;
	printf("%f", c);
//结果为2.000000

注意事项:在使用强制类型转换的时候必须要加括号,另外强制类型转换和自动转换都是对数据进行临时的转换,不改变数据在定义时的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值