C 有符号/无符号值与负值之间的比较

C 有符号/无符号值与负值之间的比较,c,sizeof,unsigned,signed,C,Sizeof,Unsigned,Signed,方案1: #include <stdio.h> int main() { if (sizeof(int) > -1) printf("Yes"); else printf("No"); return 0; } 输出:Yes 问题: 程序1和程序2之间的区别是什么 为什么sizeof(int)被认为是无符号的 为什么程序2中的2被视为已签名的 sizeof运算符返回的值的类型为size\u t,该类型被指定为无符号类型(通

方案1:

#include <stdio.h>
int main()
{
    if (sizeof(int) > -1)
        printf("Yes");
    else
        printf("No");
    return 0;
}
输出:
Yes

问题:

  • 程序1和程序2之间的区别是什么
  • 为什么
    sizeof(int)
    被认为是
    无符号的
  • 为什么程序2中的
    2
    被视为已签名的

  • sizeof
    运算符返回的值的类型为
    size\u t
    ,该类型被指定为无符号类型(通常相当于
    unsigned long

    简单的纯整数文本,如
    2
    -1
    总是类型为
    int
    ,并且
    int
    是有符号的


    如果需要无符号整数文本,则必须添加
    U
    后缀,如
    2U

    这是因为
    sizeof
    运算符返回
    size\U t
    中的值。这应该是一种无符号类型,通常实现为
    无符号int

    数字
    2
    本身是一个
    int
    ,而不是
    unsigned int

    这是有符号整数和无符号整数之间常见的算术转换问题。
    sizeof
    运算符返回类型为
    size\u t
    的值,这是一些实现定义的无符号整数类型,在
    中定义(另请参见)


    整数常量
    -1
    的类型为
    int
    。当
    size\u t
    实现为“至少”
    unsigned int
    (这在您的情况下很可能发生),则二进制运算符
    2
    的两个操作数都是
    有符号int
    文字
    2u
    将是
    unsigned
    “int是有符号的”--它的实现不是定义了
    int
    signed
    还是
    unsigned
    ?@CoolGuy Yoiu在考虑
    char
    ,所有其他整数类型都是有符号的。@Cool Guy@JoachimPileborg:或
    int
    位域。不熟悉这个术语“整型文字“。整数十进制常量总是
    int、long
    long
    。整数十六进制常量是
    int、unsigned、long、unsigned long、long long
    unsigned long
    。在32位世界中,代码可以有一个无符号常量,而没有u后缀,如0xFFFFFF。@chux a literal是直接嵌入代码中的任何常量值,因此您可以有'a'之类的字符文本,也可以有'Foo'之类的字符串文本,浮点文本,比如
    12.34
    ,当然还有整数文本,比如
    5678
    。其中一些文字可以在源代码中以不同的格式表示,对于整数文字,可以使用十进制表示法(默认)、十六进制表示法、八进制表示法和二进制表示法。
    #include <stdio.h>
    int main()
    {
        if (2 > -1)
            printf("Yes");
        else
            printf("No");
        return 0;
    }