【C语言】隐式类型和负数|正数的整形|整型提升

举报
謓泽 发表于 2023/09/20 21:04:20 2023/09/20
【摘要】 【C语言】隐式类型和负数|正数的整形|整型提升

🪁 隐式类型转换

C语言的整形算数运算符总是至少以缺省整形类型的精度来进行的。注意:int(整形)

为了获得这个精度,表达式中的字符短整型操作符在使用之前,都必须转换为整形提升

🎗 负数的整形

char a = -1;

变量 a 的二进制补码只有⑧个比特位,因为1字节 = 8比特位。补码 1111 1111

在上面说过表达式中的字符型(char)在使用之前都是需要进行整形提升的时候,高位补上符号位,即为1。所以提升后的结果是:补码 1111 1111 1111 1111 1111 1111 1111 1111


🎗 正数的整形

char b = 1;

变量 b 的二进制补码只有⑧个比特位,因为 1字节 = 8比特位。补码 0000 0001

因为 char 为有符号的 char,所以整形提升的时候,高位补充符号位,即为0。所以整形提升之后的结果是:注意,原、反、补(正数一样) 0000 0000 0000 0000 0000 0000 0000 0001


🎗 整形提升

#include<stdio.h>
int main(void)
{
	int c = 0xFF;
	char b = 0xF4;
	short a = 0xFE;

	if (a == 0xF1)
		printf("Yes\n");
	if (b == 0xF4)
		printf("Yes1\n");
	if (c == 0xFF)
		printf("Yes2\n");
	return 0;
}

编译器运行结果:Yes2

所以从上面的例子就可以得出 变量 b 和 变量 a,由于是 charshort 类型,所以发生了整形提升,使得值也得到了提升,才没有执行 if 判断里面的内容。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。