我想知道将8位值与16位值进行比较会发生什么。
我将尝试通过代码示例解释该问题:
bool result;
unsigned char a_8bit = 0xcd;
unsigned short b_16bit = 0xabcd;
result = a_8bit < b_16bit;
可能的结果可能是:
有人知道编译器会对这段代码做些什么吗?当然,我可以尝试一下,但是这个代码的不同编译器有不同的解释吗?
答案 0 :(得分:2)
1 除了bool,char16_t,char32_t或wchar_t之外的整数类型的prvalue,其整数转换等级(4.13)小于int的等级,可以转换为int类型的prvalue如果int可以表示源类型的所有值;否则,源prvalue可以转换为unsigned int类型的prvalue。 [§4.5]
因此,编译器可以将它们都提升为unsigned int
,然后进行比较。
答案 1 :(得分:1)
第一个,虽然准确地说,两者都被转换为无符号然后进行比较。
答案 2 :(得分:0)
适用正常的整数提升规则,例如参见:http://www.idryman.org/blog/2012/11/21/integer-promotion/