ホームページ > バックエンド開発 > C++ > 通常の算術変換では、符号付きオペランドと符号なしオペランドを持つ 2 項 \' \' 演算子の結果の型をどのように決定しますか?

通常の算術変換では、符号付きオペランドと符号なしオペランドを持つ 2 項 \' \' 演算子の結果の型をどのように決定しますか?

DDD
リリース: 2024-12-01 18:15:12
オリジナル
221 人が閲覧しました

How Do Usual Arithmetic Conversions Determine the Result Type of Binary

符号付きおよび符号なしの二項演算子のプロモーション ルール

次のコード スニペットを考えてみましょう:

// Snippet 1
int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
ログイン後にコピー
// Snippet 2
unsigned int us = 42;
int neg = -43;
int result = us + neg;
ログイン後にコピー

このような場合、異なる結果の型を考慮して、 " " 演算子はどのようにして正しい結果の型を決定するのでしょうか。オペランドの符号性?

演算子は、オペランドの型に基づいて型変換ステップを指示する「通常の算術変換」ルールに従います。このルールによると、どちらかのオペランドが次の場合:

  • long double、両方のオペランドはlong doubleに変換されます。
  • double、両方のオペランドはdoubleに変換されます。
  • float、両方のオペランドは float に変換されます。
  • unsigned long、他のオペランドは unsigned に変換されますlong.
  • long int と他のオペランド unsigned int の場合、unsigned int の値が long int で表現できる場合、両方のオペランドは unsigned long int に変換されます。それ以外の場合、両方とも long に変換されます。
  • long、他のオペランドは long に変換されます。
  • unsigned、他のオペランドは unsigned に変換されます。

int と unsigned int はルール内で交換可能であり、より広い型 (unsigned int) のオペランドが結果として選択されます。 type.

これは、スニペット 1 の結果が unsigned int (2147483648) であり、スニペット 2 の結果が int (-1) である理由を説明しています。符号付きオペランド (neg) は暗黙的に unsigned int に変換され、後者の場合は未定義の値になります。

以上が通常の算術変換では、符号付きオペランドと符号なしオペランドを持つ 2 項 \' \' 演算子の結果の型をどのように決定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート