我正在阅读Lippman和Lajoie的书《C++ Primer》。在第65页上,他们说:
如果我们在算术表达式中同时使用unsigned和int值,则int值通常会转换为unsigned。
如果我尝试他们的示例,事情会按预期工作,也就是说:
这个表达式应该打印出
unsigned u = 10;
int i = -42;
std::cout << u + i << std::endl; // if 32-bit ints, prints 4294967264
然而,如果我把 i 改为 -10,在32位整数的情况下,得到的结果是0,而不是预期的4294967296:
unsigned u = 10;
int i = -10;
std::cout << u + i << std::endl; // prins 0 instead of 4294967296. Why?
这个表达式应该打印出
10 + (-10 mod 2^32)
才对吧?
+
(对于无符号整数)的结果模 2^width。 - user17732522