簡體   English   中英

uint8_t的類型乘以布爾值是什么?

[英]What is the type of uint8_t multiplied by boolean value?

標准來看,我試圖了解表達式最終會是哪種類型:

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

我保證myBool會被轉換為uint8_t (也就是unsigned char ),或者整個結果可能是int嗎?

有用的鏈接: bool到int轉換

兩個操作數都將被提升為int ,這將是結果類型。

通常,整數操作數被提升為至少int ,或者如果需要則提升為更大的類型,並且不對較小的類型執行算術運算。 這由C ++ 11 4.5(整體促銷)描述。

對於uint8_t

1 /如果int可以表示源類型的所有值,則整數轉換等級小於int的整數轉換等級的boolchar16_tchar32_twchar_t的整數類型的prvalue可以轉換為int類型的prvalue。 否則,源prvalue可以轉換為unsigned int類型的prvalue。

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

對於bool

6 / bool類型的prvalue可以轉換為int類型的prvalue, false變為零, true變為1。

所以它也被提升為int ,給出整體結果類型int

從您鏈接到的文檔:

5表達式

9許多期望算術或枚舉類型操作數的二元運算符會以類似的方式引起轉換並產生結果類型。 目的是產生一個通用類型,它也是結果的類型。 這種模式稱為通常的算術轉換,定義如下:

...

- 否則,應在兩個操作數上執行整數促銷( conv.prom.1

4.5整體促銷

1如果int可以表示源類型的所有值,則可以將char,signed char,unsigned char,short int或unsigned short int類型的rvalue轉換為int類型的rvalue。 否則,源rvalue可以轉換為unsigned int類型的rvalue

...

4 bool類型的rvalue可以轉換為int類型的rvalue,false變為零,true變為1。

在您的情況下,LHS和RHS都將在算術運算之前被提升為int ,結果將是int類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM