[英]What would be the expression, true or false
uint8_t ui8 = 255;
ui8 == (int16_t)-1
据我了解的标准 :
否则,如果带符号整数类型的操作数的类型可以表示带无符号整数类型的操作数的所有值,则带无符号整数类型的操作数将转换为带符号整数类型的操作数的类型。
ui8
将被转换/提升为int16_t,然后它的算术值为-1
。 不幸的是,我使用的编译器说我不正确。
每当将uint8_t
或任何其他小整数类型用作表达式的一部分时,都会将其提升为int
类型的int
。 如果int
大于16位,则int16_t
也是如此。
因此,您的代码保证等于:
(int)255 == (int)-1
这总是错误的。
由于整数提升,两个操作数已经具有相同的类型,因此操作数之间不会发生平衡。
变量ui8
值为255
将被转换为int
类型以进行比较,但该变量仍为255
。
值(int16_t)-1
也将转换为int
类型,但它仍具有值-1
。
255
与-1
比较为false
。
ui8将被转换/提升为int16_t,然后其算术值为-1。
是的, ui8
类型将被转换/提升。(正如Lundin Sir !!在评论中提到的)。由于integer promotion
因此如果int
为16 bit
但如果在您的机器上int
大于,则ui8
将被提升为int16_t
类型。然后16 bit
将两者都提升为int
。
根据您对标准的引用,它说的是类型而不是值。 因此ui8
将保留其值255
。
因此 -
ui8==(int16_t)-1 // may be (int)u8==(int)-1 depends on size of int on you machine
结果为false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.