在c

时间:2017-02-23 14:02:43

标签: c arrays char integer

我试图将一个整数值复制到一个char *但是我总是在127以上的整数上得到一个奇怪的结果。

int main(int argc, char **argv) {
    printf("Running test\n");

    char x[2];
    int y = 127, z = 128;
    printf("\ny: "); fflush(stdout);
    for (int i = 0; i < 32; i++) {
        printf("%d", (y >> i) & 0x1);
        fflush(stdout);
    }
    printf("\nz: "); fflush(stdout);
    for (int i = 0; i < 32; i++) {
        printf("%d", (z >> i) & 0x1);
        fflush(stdout);
    }
    *x = y;
    printf("\nxy: "); fflush(stdout);
    for (int i = 0; i < 32; i++) {
        printf("%d", (*x >> i) & 0x1);
        fflush(stdout);
    }
    printf("\nxz: "); fflush(stdout);
    *x = z;
    for (int i = 0; i < 32; i++) {
        printf("%d", (*x >> i) & 0x1);
        fflush(stdout);
    }
    return 0;
}

结果:

运行测试

y:11111110000000000000000000000000
z:00000001000000000000000000000000
xy:11111110000000000000000000000000
xz:00000001111111111111111111111111

对于编译,我使用gcc v 5.4.0(只有输出标志才有意义): &#34; gcc test.c -o test&#34;

感谢任何帮助

1 个答案:

答案 0 :(得分:2)

如果您有signed char,它通常可以表示-128到+127范围内的数字。默认情况下,大多数编译器使用已签名的char

因此,即使没有移位,127以上的数字也无法正确表示。

同样正确移位负签名值是实现定义