繁体   English   中英

表达式是正确的还是错误的

[英]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因此如果int16 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM