无符号整数的负数会发生什么?

时间:2016-05-16 11:41:15

标签: c++

由于文字0xffffffff需要32位数,因此它可以表示为unsigned int但不能表示为signed int,并且类型为unsigned int。但是无符号整数的负数会发生什么?

#include <iostream>
#include <limits>

int main()
{
  int N[] = {0,0,0};

  if ( std::numeric_limits<long int>::digits==63 and
    std::numeric_limits<int>::digits==31 and
    std::numeric_limits<unsigned int>::digits==32 )
  {
    for (long int i = -0xffffffff; i ; --i)
    {
      N[i] = 1;
    }
  }
  else
  {  
    N[1]=1;
  }

  std::cout << N[0] <<N [1] << N[2];
}

输出: 010

1 个答案:

答案 0 :(得分:2)

根据定义,没有负无符号整数。

当超出无符号整数的下限时,值&#34;包围&#34;从最高可能值开始。 (反之亦然)。

在转换否定的#34;签名&#34;时,也会触发此机制。对无符号的值。

因此,有符号值-1将转换为无符号值$maximumUnsignedValue。同样,签名值-$maximumSignedValue将转换为无符号值$maximumUnsignedValue - $maximumSignedValue + 1