将8位值与16位值进行比较

时间:2013-11-25 11:34:24

标签: c++ compiler-construction compare

我想知道将8位值与16位值进行比较会发生什么。

我将尝试通过代码示例解释该问题:

bool result;
unsigned char a_8bit = 0xcd;
unsigned short b_16bit = 0xabcd;
result = a_8bit < b_16bit;

可能的结果可能是:

  • a_8bit隐式地转换为无符号短路,并与b_16bit作为16位值进行比较。结果是真的
  • b_16bit隐式地转换为unsigned char,并将a_8bit作为8位值进行比较。结果为假

有人知道编译器会对这段代码做些什么吗?当然,我可以尝试一下,但是这个代码的不同编译器有不同的解释吗?

3 个答案:

答案 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/