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

Har*_*non 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*ron 5

有两件事正在发生.

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

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