xiaochangfu 发表于 2010-10-25 15:52

负数的原码与补码

本帖最后由 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);

}

xiaochangfu 发表于 2010-10-25 15:58

好像正数需要多一位表示符号.可是负数就不要?

负数的反码是将其原码除符号位之外的各位求反
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。

EricFisher 发表于 2010-10-25 18:06

把代码和执行过程详细贴出来如何?

xiaochangfu 发表于 2010-10-25 18:50

回复 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);

}

snail_314 发表于 2010-10-25 19:53

int类型导致符号扩展
页: [1]
查看完整版本: 负数的原码与补码