代码之家  ›  专栏  ›  技术社区  ›  Hari Menon

C中的数据类型和数据类型修饰符

  •  2
  • Hari Menon  · 技术社区  · 15 年前

    我对C很陌生。我最近在C中遇到了这段代码:

    #include <stdio.h>
    
    int main()
    {
            unsigned Abc = 1;
            signed Xyz = -1;
    
            if(Abc<Xyz)
                    printf("Less");
            else
            if(Abc>Xyz)
                    printf("Great");
            else
            if(Abc==Xyz)
            printf("Equal");
            return 0;
    }
    

    我试着运行它,它输出的“更少”。它是如何工作的?未签字的ABC是什么意思?我可以理解无符号字符abc,但只是简单的无符号abc?我很肯定ABC不是数据类型!怎样(为什么?)这行吗?

    8 回复  |  直到 15 年前
        1
  •  1
  •   Paul    15 年前

    C中的默认类型是 int . 因此 unsigned 是的同义词 unsigned int .

    单个整数通常使用两个补码来处理。这意味着1的实际值为0x001,-1的实际值为0xffff。

        2
  •  5
  •   Darron    15 年前

    有两件事正在发生。

    1. int中c的默认数据类型。因此,您有signed int和unsigned int类型的变量。

    2. 当表达式中使用和无符号int和有符号int时,在计算表达式之前,有符号int将转换为无符号int。这将导致有符号(-1)变为非常大的无符号数(由于2的补码表示)。

        3
  •  1
  •   helpermethod    15 年前

    据我所知,有符号值被提升为无符号值,因此变得非常大。

        4
  •  1
  •   dan04    15 年前

    int 是C中的“默认”类型。 unsigned Abc 方法 unsigned int Abc 就像 long L 方法 long int L .

    当您有一个混合有符号和无符号整数的表达式时,有符号整数将自动转换为无符号。大多数系统使用二的补码来存储整数,所以 (unsigned int)(-1) 等于最大值 unsigned int .

        5
  •  1
  •   Alexandre C.    15 年前

    比较有符号和无符号类型会导致 未定义的行为 . 您的程序可以并且将在不同的平台上打印不同的结果。

    请看评论。

        6
  •  0
  •   NoxArt    15 年前

    unsigned/signed只是unsigned int/signed int的简短规范( source ,所以不,您没有“无数据类型”的变量。

        7
  •  0
  •   chaitanyavarma    15 年前

    有符号值将提升为无符号,因此它将大于1。

        8
  •  0
  •   Ibrahim    15 年前

    在签名xyz=-1之后添加以下行;

    printf("is Abc => %x less than Xyz => %x\n",Abc,Xyz);
    

    自己看看结果。