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

时间:2010-09-17 18:43:39

标签: c types

我是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;
}

我尝试运行它并输出“Less”。它是如何工作的? unsigned Abc是什么意思?我可以理解unsigned char Abc,但只是未签名的Abc?我很确定Abc不是数据类型!如何(和为什么?)这样做?

8 个答案:

答案 0 :(得分:5)

发生了两件事。

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

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

答案 1 :(得分:1)

C中的默认类型是int。因此,unsignedunsigned int的同义词。

Singed整数通常使用二进制补码处理。这意味着1的实际值是0x0001,-1的实际值是0xFFFF。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

int是C中的“默认”类型。unsigned Abc表示unsigned int Abc就像long L表示long int L一样。

如果有一个混合有符号和无符号整数的表达式,则有符号整数会自动转换为无符号整数。大多数系统使用二进制补码来存储整数,因此(unsigned int)(-1)等于最大可能unsigned int

答案 4 :(得分:1)

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

请参阅评论。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

签名Xyz = -1后添加以下行;

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

并亲自查看结果。