负数的原码与补码
本帖最后由 xiaochangfu 于 2010-10-25 18:51 编辑
typedef struct AA
{
int b1:5;
int b2:2;
}AA;
如上定义.
然后给b1赋值 10000B
为什么打印出来的是-16 而不是16 在线求解,,谢谢
typedef struct AA
{
char b1:5;
char b2:2;
char b3:3;
}AA;
AA aa;
char cc[13];
strcpy(cc,"123456");
memcpy(&aa,cc,sizeof(AA));
printf("n%dn",sizeof(AA));
printf("%dn",aa.b1);
printf("%dn",aa.b2);
printf("%dn",aa.b3);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
int类型导致符号扩展
回复 3# EricFisher
typedef struct AA
{
char b1:2;
char b2:2;
char b3:3;
}AA;
AA aa;
char cc[13];
strcpy(cc,"123456");
memcpy(&aa,cc,sizeof(AA));
printf("n%dn",sizeof(AA));
printf("%dn",aa.b1);
printf("%dn",aa.b2);
printf("%dn",aa.b3);
}
把代码和执行过程详细贴出来如何?
好像正数需要多一位表示符号.可是负数就不要?
负数的反码是将其原码除符号位之外的各位求反
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。