第一种方法:
union int_char {
int val;
unsigned char c[sizeof(int)];
} data;
data.val = n1;
// printf("Integer: %p\nFirst char: %p\nLast char: %p\n", &data.f, &data.c[0], &data.c[sizeof(int)-1]);
for(int i = 0; i < sizeof(int); i++)
printf("%.2x", data.c[i]);
printf("\n");
第二点:
for(int i = 0; i < 8*sizeof(int); i++) {
int j = 8 * sizeof(int) - 1 - i;
printf("%d", (val >> j) & 1);
}
printf("\n");
第二种方法的输出结果是00000002
和02000000
。我还尝试了其他数字,似乎这两个字节被交换了。哪一个是正确的?
02000000
?printf("%d", (val >> j) & 1);
只应该输出0
或者1
,不应该输出2
。 - Gerhardhval
是什么类型?它是如何赋值的?除非val
是unsigned
,否则printf("%d", (val >> j) & 1);
会出现问题。一个 [mcve] 可以改善这篇文章。 - chux - Reinstate Monica