我正在浏览C++ Primer 5th Edition,目前正在执行签名/未签名部分。一个简单的问题我已经是当有环绕,也就是说,在这个代码块:回顾C++中unsigned int的范围?
unsigned u = 10;
int i = -42;
std::cout << i + i << std::endl; // prints -84
std::cout << u + i << std::endl; // if 32-bit ints, prints 4294967264
我认为最大范围为4294967295与0被计数,所以我想知道为什么包装在这个问题上似乎是从4294967296完成的。
有用的提示:有符号b位2的补码数的范围是[ - (2 ^(b-1)),(2 ^(b-1)) - 1]。请注意,这不是对称的。 – wjl 2015-04-03 04:33:10
你认为'0u - 1'应该是什么? – 2015-04-03 04:37:07
'UINT_MAX'保证*至少*'65535'。在大多数现代实现中,它通常是'4294967295'。 – 2015-04-03 04:38:20