問題タブ [integer-promotion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - int8_t に定数を追加すると、より大きな型に昇格されるのはなぜですか?
gcc では、より小さい整数型に定数を加算または減算するint
と、int
.
4 を与えます。単純な+=
ステートメントを-Wconversion
. その警告フラグが設定された状態で、
与える
wat.cpp:7:6: 警告: 'int' から 'int8_t {aka signed char}' への変換により、その値が変更される可能性があります [-Wconversion]
この警告を抑制する方法はありますか? なぜこれが起こっているのですか?キャスティングはうまくいかないようです。
c - 符号なしの型とより大きな符号付きの型の間の暗黙的な変換の一貫性のない動作
次の例を検討してください。
コンパイルするには、GCC 4.4.7 を使用しています (警告は表示されませんでした)。
私の結果は次のとおりです。
問題は、 と の両方unsigned char
の値が (signed)にunsigned short
正しく「伝播」され、そうでないのはなぜですか? これに関する参照またはルールはありますか?long
unsigned int
gdb
それに応じて(単語はリトルエンディアン順です)からの結果は次のとおりです。
c++ - CおよびC++で算術演算の前にshortをintに変換する必要があるのはなぜですか?
この質問から得た回答から、C++ は、Cから算術演算を実行するときに を に変換するこの要件を継承しているようです。そもそもなぜこれが C に導入されたのか、あなたの頭脳を選んshort
でよろしいですか? これらの操作を として実行しないのはなぜですか?int
short
例(コメントのdypの提案から取得):
x
int型になります。
c - 単項 + 演算子は型変換を行いますか?
今まで、単項+
演算子は使えないと思っていました。
しかし、その後、次の例に出くわしました:
+
ここで型変換をしているということですか?
以下と同じ振る舞いをしているため
+
これにより、型変換を行っていると思わざるを得なくなります。
しかし、私はそれを試してみますdouble
これにより、単項演算子について再考する必要があり+
ます。
だから私の2番目の質問は: 単項+
演算子は演算子に特別な効果がありsizeof
ますか?
c - これを説明していただけますか—「混合型のオペランドを含む規則はシフト演算子には適用されません」
Mike Banahan による C ブック(セクション 2.8.2.3)からの次の抜粋にある「シフトの結果は、シフトされたものと同じ型を持っています (積分昇格後)」という行を理解できません。
重要なことに、混合型のオペランドを含む規則はシフト演算子には適用されません。シフトの結果は、(積分昇格の後に) シフトされたものと同じ型を持ち、他には何にも依存しません。
何かがすでに整数に昇格されている場合 (シフト演算子の使用中に必要な場合)、それを元の型と同じ型に戻すにはどうすればよいですか? もちろん、それが割り当ての右側にあり、割り当てられている場合を除きます。整数昇格前と同じ型の変数? さらに、「混合型のオペランドを含む規則はシフト演算子には適用されない」という行は正確には何を意味していますか?
質問の両方の部分に光を当ててください。ありがとうございました。
以下は、本からのスクリーンショットで、それぞれビット単位の演算子の使用中および一般的な混合式中のプロモーションに関連しています。