有符号和无符号数字的比较

时间:2013-05-21 11:19:22

标签: c signed unsigned-integer

下面是如下所示的问题,答案是真的。我知道当你比较签名和未签名时会有一些促销。你能告诉我签名价值是如何升级的吗?

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

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

      }

高级谢谢 麦迪

2 个答案:

答案 0 :(得分: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

分享并享受。

答案 1 :(得分:1)

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