关于整形提升的一个代码问题


#include <stdio.h>
int main()
{
    char a = 1;
    printf("%d", sizeof !a);
    return 0;
}

此处打印结果为什么是1,我把!更换成+或者-结果都是4

gcc 结果是4,这个和编译器有关,应该是未定义行为。

img

【以下回答由 GPT 生成】

这段代码的打印结果是1是因为在C语言中,对于逻辑非运算符"!",如果操作数为非零值,则结果为0;如果操作数为零,则结果为1。在这段代码中,sizeof运算符返回的是字节大小,而不是值。所以对于非零的操作数a,sizeof !a 相当于 sizeof 0,结果为1。

如果将"!"替换为"+"或"-",那么编译器会将char类型的a提升为int类型,这是因为在表达式中char类型会自动转换为int类型进行计算。对于char类型的a,为节省内存空间,所以占用字节数为1。但是在运算过程中,int类型的运算结果会占用4个字节,所以sizeof +a 或 sizeof -a 结果都是4。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^