1

这是如下所示的问题,答案为真。我知道当您比较签名和未签名时会发生一些提升。您能告诉我签名值是如何提升的吗?

      main()
      {
          signed int a  = -5;
          unsigned int b = 2147483648;

          if(a > b)
             printf("True\n");
         else
          printf("False\n");  

      }

高级感谢麦迪

4

2 回答 2

3

尝试打印出转换后的值,看看发生了什么:

int main(int argc, char **argv)
  {
  signed int a  = -5;
  unsigned int ua = a;
  unsigned int b = 2147483648;

  printf("a=%d  ua=%u  b=%u\n", a, ua, b);

  if(a > b)
    printf("True\n");
  else
    printf("False\n");  
  }

印刷

a=-5  ua=4294967291  b=2147483648
True

分享和享受。

于 2013-05-21T11:27:05.700 回答
2

如您所知,有符号数的 MSB 被视为符号位,如果是无符号数,它会添加到该数字的值。对于负数,例如-5,二进制值是11111111111111111111111111111011MSB 是符号位的位置,其余位给出 2 的补码 5(对于 -5)。当将其转换为无符号数时,所有位都被认为是找到该数的值,包括 MSB 也是如此,其值变为4294967291

于 2013-05-21T11:47:08.933 回答