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

what happens with the negative of an unsigned integer?

本文关键字:什么 无符号整数      更新时间:2023-10-16

由于文字0xffffffff需要32位数字,它可以表示为无符号int,但不能表示为有符号int,并且是无符号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被转换为无符号值$maximumUnsignedValue。类似地,有符号值-$maximumSignedValue被转换为无符号值$maximumUnsignedValue - $maximumSignedValue + 1