Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解释C程序的输出_C - Fatal编程技术网

如何解释C程序的输出

如何解释C程序的输出,c,C,代码: 输出为:fffffff7。 我的机器是little endian。当然我知道*b等于0xf7,但我不知道为什么printf()的输出是这样的。+-----------------------+ int main() { unsigned int a = 0xfffffff7; char *b = (char *)&a; printf("%08x",*b); } |F7由于您的系统是small endian,a作为F7 FF存储在内存中 b指向a的第一个字

代码:

输出为:
fffffff7
。 我的机器是little endian。当然我知道
*b
等于
0xf7
,但我不知道为什么
printf()
的输出是这样的。

+-----------------------+
int main()
{
    unsigned int a = 0xfffffff7;
    char *b = (char *)&a;
    printf("%08x",*b);
}

|F7由于您的系统是small endian,
a
作为
F7 FF
存储在内存中

b
指向
a
的第一个字节。(F7)

*b
计算为
char
。(F7)


*b
升级为
int
以作为参数传递,因为它的类型为
char
(通常默认为
signed char
),它被符号扩展为
fffffff 7

您期望的是什么?
%08x
要求十六进制,8个字符宽,前导零。当将字符打印为整数类型时,在打印前会将其加宽为整数。为什么输出不为000000 f7
char
,在您的系统上,被定义为有符号,因此符号位在加宽时会扩展。这是未定义的行为。您正在向
printf()函数传递一个
char
(它被提升为
int
,并告诉
printf()
您传递的是某种类型的指针。在指针大于整数的平台上,这可能会崩溃,这是完全有可能的。@t对于这个错误,我深表歉意。重要的是您已经解决了:)
 +-----------------------+
 |  F7   <--b=(char *) &a|
 |  FF                   |
 |  FF                   |
 |  FF                   |
 |                       |
 +-----------------------+


 printf("%08x",*b);