一个简单的C语言赋值问题~

来源:百度知道 编辑:UC知道 时间:2024/06/08 16:10:10
请帮忙分析一下这段程序
#include "stdio.h"
void main()
{unsigned a;
int b=-1;
a=b;
printf("%d->%u\n",b,a);
书上这段程序 输出结果答案是 -1->65535

我的理解是 -1在内存中存储为11 11 11 11 11 11 11 11
那么输出b时候就应该保留符号位 取反加1 结果为-1

而a为unsig 所以b赋予a应该为11 11 11 11 11 11 11 11
所以输出应该为取反加1 结果为1 . 所以输出结果应该为-1->1
是不是这样呢?

它是将-1当作是无符号数来读取,任何数值在计算机中都以二进制形式存储在计算机内存中的!你读取的时候,看你是想将数据当作是有符号数据还是无符号数据来读取!而%u是以无符号形式读取a中的值,a中的值还是11 11 11 11 11 11 11 11 所以是65535