由于文字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
答案 0 :(得分:2)
根据定义,没有负无符号整数。
当超出无符号整数的下限时,值&#34;包围&#34;从最高可能值开始。 (反之亦然)。
在转换否定的#34;签名&#34;时,也会触发此机制。对无符号的值。
因此,有符号值-1将转换为无符号值$maximumUnsignedValue
。同样,签名值-$maximumSignedValue
将转换为无符号值$maximumUnsignedValue - $maximumSignedValue + 1
。