uint8_t ui8 = 255;
ui8 == (int16_t)-1
据我了解standard:
否则,如果带有符号整数类型的操作数的类型可以表示具有无符号整数类型的操作数类型的所有值,则具有无符号整数类型的操作数将转换为带有符号整数的操作数的类型类型。
ui8
将被转换/提升为int16_t,然后它的算术值将为-1
。不幸的是,我使用的编译器说我不对。
答案 0 :(得分:4)
每当uint8_t
或任何其他小整数类型用作表达式的一部分时,它会将整数提升为类型int
。 int16_t
也是如此,如果int
大于16位。
所以你的代码保证等于:
(int)255 == (int)-1
总是假的。
由于整数提升,两个操作数已经是相同的类型,因此不会在操作数之间进行平衡。
答案 1 :(得分:3)
ui8
的变量255
将转换为int
类型进行比较,其值仍为255
。
值(int16_t)-1
也会转换为int
类型,其值仍为-1
。
255
进行比较的 -1
为false
。
答案 2 :(得分:1)
ui8将被转换/提升为int16_t,然后它的算术值将为-1。
是的,ui8
的类型将被转换/提升。(正如Lundin Sir所述!!评论中)由于integer promotion
因此ui8
将被提升为int16_t
类型1}}如果int
为16 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
。