C语言隐式类型转换(整型提升)

隐式类型转换(整型提升)概念

C语言是一种强类型语言,当使用一种类型的对象代替另外一种类型的对象进行操作时,必须首先进行类型转换。 隐式类型转换由编译器自动进行,不需要程序员干预。

有关隐式类型转换的概念是来自这里

说得通俗一点就是

定义的类型和输出的类型不一致,比如定义一个char型变量却用%d类型来输出

整型提升概念

在这里插入图片描述

这是来自比特上课截的图

整型提升的规则

整型提升是按照变量的数据类型的符号来提升的

正数的整型提升

	char ch1 = 1;
	变量ch1的二进制位(补码)中只有8个比特位
	本来是00000000000000000000000000000001
	然后截断后就变成了00000001(后8bit)
	因为char为有符号的char(后面的文章会讲到)
	所以整型提升时,就高位补充符号位,即为0
	所以变成
	00000000000000000000000000000001(假设以int类型输出)

举例:
在这里插入图片描述
如图所示
10的原码反码和补码是一样的,所以10的补码就是
00000000000000000000000000001010
但是ch1是char型,所以在内存中储存的是00001010(只要后八位)

随后ch1要整型输出,而符号位是0,所以整型提升后的补码为
00000000000000000000000000001010

负数的整型提升

	char ch2 = -1;
	-1的补码是11111111111111111111111111111111
	变量ch2的二进制位(补码)只有8bit
	所以截断后就是11111111
	有因为char是有符号的char,
	所以在整型提升的时候,高位补充符号位,即为1
	提升之后的结果就为
	11111111111111111111111111111111
	

可能这样看不出不用符合的类型输出会有什么差异,这用几个稍微难一点的例子来说明

	unsigned char ch3 = -1;//表示的是无符号类型的char
	-1的补码同样是11111111111111111111111111111111
	所以截断后就是11111111
	但是char是无符号的char
	所以符号位程序认为是0,高位补充符号位,即为0
	所以提升后的结果就是
	00000000000000000000000011111111
	如果以%d形式输出的话,答案就是255

总结

用好相应的类型输出是很重要的,不要以为用不一样的类型输出结果就会是一样,那种几率是很小的

至于文中补码,反码,原码的转化以及无符号有符号的差异将会后续写文章说明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值