0
点赞
收藏
分享

微信扫一扫

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

f12b11374cba 2022-03-19 阅读 97
c语言

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

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

说得通俗一点就是

整型提升概念

在这里插入图片描述

整型提升的规则

正数的整型提升

	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

总结

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

举报

相关推荐

0 条评论