得到建议阅读 "C++ Primer 5 ed by Stanley B. Lipman" 后,我不理解这个问题:
第66页,“涉及无符号类型的表达式”
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
他说:
在第二个表达式中,在执行加法之前,将整数值-42转换为无符号数。将负数转换为无符号数的行为恰好就像我们尝试将该负值分配给无符号对象一样。如上所述,“值会环绕”。
但如果我做这样的事情:
unsigned u = 42;
int i = -10;
std::cout << u + i << std::endl; // Why the result is 32?
正如你所看到的,-10
没有被转换为unsigned int
。这是否意味着在将有符号整数
提升为无符号整数
之前发生了比较?