我正在进行以下比较:
uint32_t value = 1000;
if(value < 100)
{
// do something
}
在这种情况下,什么被转换成什么?'value'被转换为整数吗?100被转换成整数还是无符号整数?
我正在进行以下比较:
uint32_t value = 1000;
if(value < 100)
{
// do something
}
100
的情况下,由于它是十进制的,没有后缀,并且可以适合int
的范围内,该常量的类型为int
。如果两个整数表达式与您提供的示例具有相同的等级,假设类型uint32_t是类型unsigned int的别名,则有符号类型将转换为无符号类型。也就是说,具有有符号int类型的整数文字100将转换为无符号int类型。
来自C标准(6.3.1.1布尔值、字符和整数)
- 任何无符号整数类型的等级应等于相应有符号整数类型(如果有)的等级。
并且(6.3.1.8通常算术转换)
否则,如果具有无符号整数类型的操作数的等级大于或等于另一个操作数类型的等级,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型
1000
标识为_常量_,而非_字面值_ - 或许您在想另一种语言?到目前为止,C的_字面值_(字符串和复合)可以取其地址,但1000则不行。 - chux - Reinstate Monica1000
被_coverted_了。 - chux - Reinstate Monica