C和C++标准规定,在有符号和无符号整数的二进制操作中,如果这两个整数等级相同,那么有符号整数会被强制转换为无符号整数。对此有许多stackoverflow上的问题,我们称之为奇怪的行为:unsigned to signed conversion、C++ Implicit Conversion (Signed + Unsigned)、A warning - comparison between signed and unsigned integer expressions、% (mod) with mixed signedness等。
但是,这些问题都没有给出任何理由,说明为什么标准要这样做,而不是将其转换为有符号整数。我找到了一位自称专家,他说这是显然正确的事情,但他也没有给出解释:http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on-signed-and-unsigned-integers/。
在我的代码中查找时,无论我组合有符号和无符号整数的地方,我总是需要从无符号转换为有符号。虽然也有一些地方不重要,但我没找到一个唯一的代码示例,其中将有符号整数转换为无符号整数是有意义的。
什么情况下将其转换为无符号是正确的?为什么标准是这样的?
但是,这些问题都没有给出任何理由,说明为什么标准要这样做,而不是将其转换为有符号整数。我找到了一位自称专家,他说这是显然正确的事情,但他也没有给出解释:http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on-signed-and-unsigned-integers/。
在我的代码中查找时,无论我组合有符号和无符号整数的地方,我总是需要从无符号转换为有符号。虽然也有一些地方不重要,但我没找到一个唯一的代码示例,其中将有符号整数转换为无符号整数是有意义的。
什么情况下将其转换为无符号是正确的?为什么标准是这样的?
0xFFFF
转换为无符号并以单一和明确定义的方式完成呢?(请注意,我考虑的是16位整数,因为那是70年代。) - Cris Luengo