负数的原码与补码
本帖最后由 xiaochangfu 于 2010-10-25 18:51 编辑typedef structAA
{
int b1:5;
int b2:2;
}AA;
如上定义.
然后给b1赋值10000B
为什么打印出来的是-16而不是16 在线求解,,谢谢
typedef structAA
{
char b1:5;
char b2:2;
char b3:3;
}AA;
AA aa;
char cc;
strcpy(cc,"123456");
memcpy(&aa,cc,sizeof(AA));
printf("\n%d\n",sizeof(AA));
printf("%d\n",aa.b1);
printf("%d\n",aa.b2);
printf("%d\n",aa.b3);
} 好像正数需要多一位表示符号.可是负数就不要?
负数的反码是将其原码除符号位之外的各位求反
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 把代码和执行过程详细贴出来如何? 回复 3# EricFisher
typedef structAA
{
char b1:2;
char b2:2;
char b3:3;
}AA;
AA aa;
char cc;
strcpy(cc,"123456");
memcpy(&aa,cc,sizeof(AA));
printf("\n%d\n",sizeof(AA));
printf("%d\n",aa.b1);
printf("%d\n",aa.b2);
printf("%d\n",aa.b3);
} int类型导致符号扩展
页:
[1]