1. ホーム
  2. c++

[解決済み] C++の演算子における暗黙の型変換規則

2022-04-14 06:35:04

質問

キャストするタイミングをうまく見極められるようになりたいです。C++で足し算、掛け算などをするときの暗黙の型変換ルールは何ですか?例えば

int + float = ?
int * float = ?
float * int = ?
int / float = ?
float / int = ?
int / int = ?
int ^ float = ?

などなど...

式は常に、より正確な型として評価されるのでしょうか?Javaではルールが違うのでしょうか? この質問の表現が不正確であれば、訂正してください。

どのように解決するのですか?

C++の演算子(POD型用)は、常に同じ型のオブジェクトに作用します。

したがって、もしそれらが同じでない場合、一方は他方に一致するように昇格します。

演算結果の型はオペランドと同じ(変換後)です。

if:
either is      long double       other is promoted >      long double
either is           double       other is promoted >           double
either is           float        other is promoted >           float
either is long long unsigned int other is promoted > long long unsigned int
either is long long          int other is promoted > long long          int
either is long      unsigned int other is promoted > long      unsigned int
either is long               int other is promoted > long               int
either is           unsigned int other is promoted >           unsigned int
either is                    int other is promoted >                    int

Otherwise:
both operands are promoted to int

注 操作の最小サイズは int . そのため short / char に昇格します。 int を実行する。

すべての式で int に昇格します。 float を実行する。操作の結果は float .

int + float =>  float + float = float
int * float =>  float * float = float
float * int =>  float * float = float
int / float =>  float / float = float
float / int =>  float / float = float
int / int                     = int
int ^ float =>  <compiler error>