uint8_t的类型乘以布尔值是什么?

时间:2014-09-18 16:29:55

标签: c++ boolean

standard开始,我试图了解表达式最终会是哪种类型:

bool myBool;
[...]
uint8_t(255) * (myBool);

我保证myBool会被投放到uint8_t(a.k.a。unsigned char),或者整个结果可能是int吗?

有用的链接:bool to int conversion

2 个答案:

答案 0 :(得分:4)

两个操作数都将被提升为int,这将是结果类型。

通常,整数操作数被提升为至少int,或者如果需要则提升为更大的类型,并且不对较小的类型执行算术运算。这由C ++ 11 4.5(整体促销)描述。

uint8_t

  

1 /除boolchar16_tchar32_twchar_t以外的整数类型的整数类型的整数转换等级小于{{1如果int可以表示源类型的所有值,则可以转换为int类型的prvalue;否则,源prvalue可以转换为int类型的prvalue。

如果存在,那么所有8位unsigned int值都可由uint8_t表示(必须至少为16位),因此int是提升类型。

int

  

6 /类型bool的prvalue可以转换为bool类型的prvalue,int变为零,false成为一个。

因此,它也会提升为true,整体结果类型为int

答案 1 :(得分:3)

从您链接到的文件:

  

5个表达

     

9许多期望算术运算或枚举操作的二元运算符     类型导致转换并以类似的方式生成结果类型。     目的是产生一种通用类型,它也是一种类型     结果。这种模式称为通常的算术转换,     其定义如下:

     

...

     

- 否则,应执行整体促销( conv.prom )       在两个操作数上.1)

  

4.5整体促销

     

1 char类型的rvalue,signed char,unsigned char,short int或     如果是int,unsigned short int可以转换为int类型的rvalue     可以表示源类型的所有值;否则,来源     rvalue可以转换为unsigned int

类型的右值      

...

     

4 bool类型的rvalue可以转换为int类型的rvalue     假成为零,真正成为一个。

在您的情况下,LHS和RHS在算术运算之前将被提升为int,结果将是int类型。

相关问题