[解決済み] 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>
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み] C++の識別子でアンダースコアを使用する場合のルールについて教えてください。
-
[解決済み] reinterpret_castはいつ使うのか?
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み] C++11でsafe-boolイディオムは廃止されますか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】'cout'は型名ではない
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない