我正在尝试理解 C 中的数字表示。我正在处理如下所示的代码段。
#include <stdio.h>
#include <string.h>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, int len)
{
int i;
for (i = 0; i < len; i++)
printf(" %.2x", start[i]);
printf("\n");
}
void show_int(int x) {
show_bytes((byte_pointer) &x, sizeof(int));
}
void show_unsigned(short x) {
show_bytes((byte_pointer) &x, sizeof(unsigned));
}
int main(int argc,char*argv[])
{
int length=0;
unsigned g=(unsigned)length;// i aslo tried with unsigned g=0 and the bytes are the same
show_unsigned(g);
show_int(length);
printf("%d",g);//this prints 0
return 0;
}
在这里,show_unsigned()
并show_int()
打印指定为参数的变量的字节表示。对于 int 长度,字节表示按预期全为零,但对于无符号 g,字节表示是00 00 04 08
。但是当我用 %d 打印 g 时,我得到 0(所以我想数值被解释为 0 )
请有人解释这是如何发生的。