在C99标准中转换为unsigned char的unsigned int的行为是什么?

时间:2013-03-27 21:21:33

标签: c casting c99 endianness type-conversion

例如:

#include <stdio.h>

int main(void){
    unsigned int x = 64;
    x += 1023;

    unsigned char y = x;

    printf("%u\n", y);
    return 0;
}

变量y在我的计算机上保存值63。当 unsigned int 转换为 unsigned char 时,C99标准是否保证存储最低有效字节,或者机器的字节顺序是否影响转换?< / p>

2 个答案:

答案 0 :(得分:4)

标准说明了转换为无符号类型:

  

当整数类型的值转换为另一个整数类型时   除了_Bool之外,如果值可以用新类型表示,那么   没有改变。

     

否则,如果新类型是无符号的,则转换为   重复加或减一个以上的最大值   可以用新类型表示,直到值在范围内   新类型。

如果它不合适,这是一种说法价值包装的奇特方式。所以在你的情况下你总是得到63 ,在所有机器上,除非你的unsigned char实际上可以存储超过255:它与字节序无关。

答案 1 :(得分:0)

Endianness对演员阵容无关紧要。只有C值很重要。