我正在进行以下比较:
uint32_t value = 1000;
if(value < 100)
{
// do something
}
在这种情况下,结果会变成什么? “值”是否转换为整数?是否将100强制转换为整数或无符号整数?
如果两个整数表达式与您的示例具有相同的排名,但前提是uint32_t类型是unsigned int类型的别名,则将有符号类型转换为无符号类型。那就是将类型为signed int的整数文字100转换为unsigned int类型。
如何执行比较由通常的算术转换决定。具体来说,整数类型的转换规则在c标准的6.3.1.8节中指定,如下所示:
...整数提升在两个操作数上执行。然后将以下规则应用于提升后的操作数:
- 如果两个操作数具有相同的类型,则不需要进一步的转换。
- 否则,如果两个操作数都具有符号整数类型或都具有无符号整数类型,则类型较小的操作数整数转换等级转换为操作数的类型排名更高。
- 否则,如果具有无符号整数类型的操作数的秩大于或等于该整数的类型的秩其他操作数,则带符号整数类型的操作数为用无符号整数转换为操作数的类型类型。
- 否则,如果带符号整数类型的操作数的类型可以表示带无符号操作数类型的所有值整数类型,则无符号整数类型的操作数为转换为带符号整数类型的操作数的类型。
- 否则,两个操作数都将转换为与带符号的操作数类型相对应的无符号整数类型整数类型