鉴于此代码段,输出CPU是否依赖?

时间:2014-01-30 11:53:22

标签: c

void main() {

        if(-1 > 0U)
                printf("True\n");
        else
                printf("False\n");
}

是否依赖于处理器(big endian / little endian)?

2 个答案:

答案 0 :(得分:8)

来自C99 6.3.1.8

  

[...]否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的等级,则带有符号整数类型的操作数将转换为操作数的类型无符号整数类型。

由于intunsigned int具有相同的转换排名(请参阅6.3.1.1),因此-1将转换为unsigned int。根据{{​​3}},转换结果将为(-1 + UINT_MAX + 1) % (UINT_MAX + 1)(算术说出来),显然为UINT_MAX,因此大于0

结论是C标准要求(-1 > 0U)为真。

答案 1 :(得分:2)

一段代码是Endian-Dependent ,只有当它使用类型小于x类型的指针访问变量x

例如:

int   x = 0x12345678;
char* p = (char*)&x;
char  c = p[0]; // 0x12 on BE and 0x78 on LE

请注意强调“仅在”时,与相对,当且仅当“

因此,有些例子在BE和LE上的表现仍然相同:

struct s {int a; int b;} x = {0x11223344,0x55667788};
int* p = (int*)&x;
int  i = p[0]; // 0x11223344 in both cases

注意:

对于BE和LE,可以不同地编译位域结构。

但是这可以称为编译器依赖,而不是架构依赖。