我试图将一个整数值复制到一个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;
感谢任何帮助
答案 0 :(得分:2)
如果您有signed char
,它通常可以表示-128到+127范围内的数字。默认情况下,大多数编译器使用已签名的char
。
因此,即使没有移位,127以上的数字也无法正确表示。
同样正确移位负签名值是实现定义。