什么是表达,真或假

时间:2015-08-31 12:10:24

标签: c

uint8_t ui8 = 255;
ui8 == (int16_t)-1

据我了解standard

  

否则,如果带有符号整数类型的操作数的类型可以表示具有无符号整数类型的操作数类型的所有值,则具有无符号整数类型的操作数将转换为带有符号整数的操作数的类型类型。

ui8将被转换/提升为int16_t,然后它的算术值将为-1。不幸的是,我使用的编译器说我不对。

3 个答案:

答案 0 :(得分:4)

每当uint8_t或任何其他小整数类型用作表达式的一部分时,它会将整数提升为类型intint16_t也是如此,如果int大于16位。

所以你的代码保证等于:

(int)255 == (int)-1

总是假的。

由于整数提升,两个操作数已经是相同的类型,因此不会在操作数之间进行平衡。

答案 1 :(得分:3)

值为ui8

变量255将转换为int类型进行比较,其值仍为255

(int16_t)-1也会转换为int类型,其值仍为-1

255进行比较的

-1false

答案 2 :(得分:1)

  

ui8将被转换/提升为int16_t,然后它的算术值将为-1。

是的,ui8的类型将被转换/提升。(正如Lundin Sir所述!!评论中)由于integer promotion因此ui8将被提升为int16_t类型1}}如果int16 bit,但如果您的计算机int大于16 bit,则两者都会提升为int

根据您对标准的引用,它说的不是类型而是类型。因此ui8将保留其值255

因此 -

  ui8==(int16_t)-1 // may be (int)u8==(int)-1 depends on size of int on you machine

结果为false