問題タブ [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.

0 投票する
2 に答える
1412 参照

c++ - char はデフォルトで昇格されますか?

これはばかげた質問かもしれませんが、誰かが C++11 と C11 の標準リファレンスを提供してくれませんか:

charデフォルトで昇格されていintますか?

ここで少し背景を説明します。C と C++ の両方に、既定の引数昇格の概念があります(C++11: 5.2.2/7; C11: 6.5.2.2/6)。これにより、次の呼び出しで引数が昇格されます。

関数呼び出しの場合、aは に変換されdoublebは に変換されintます。しかし、どうなりcますか?私は常にcharも に昇格するという印象を受けてきましintたが、基準に関連するステートメントを見つけることができません。

0 投票する
3 に答える
566 参照

c - 式を評価するとき、整数の昇格は常に行われますか?

重複の可能性:
幅の広い整数に代入するときの C 整数オーバーフローの動作

グーグルでこれに関する明確な答えが見つかりませんでした。次の 2 つの式があるとします。

(a16 * b16) / a16and を評価するとき(a8 * b8) / a8、それらは評価中に常に昇格さintれ、最終結果は代入の直前に目的の型 (int16_tまたは) に変換されますか、それともこの整数昇格は完全にオプションですか? int8_t整数式の評価中の整数昇格は常に行われますか、それとも単純に許可されますか?

常に行われている場合、2 つの操作がオーバーフローしないことが期待できます ( int32 ビットであると仮定します)。実行のみが許可されている (必須ではない) 場合、操作がオーバーフローする可能性があります。挙動をよく知りたいです。

0 投票する
3 に答える
1709 参照

c - 省略記号を介して送信された場合の「long」および「size_t」の整数昇格?

実装している誰かの観点からこの質問を見てprintfください。

の引数はprintf省略記号 ( ...) を介して渡されるため、整数に昇格されます。私はそれを知っていてchar、昇進shortしないのに昇進します。同様に、対応するものについても。intintlong longunsigned

これは、varargs を読み取るときに、 にva_arg(args, int)は を使用しcharshortにはintwhileva_arg(args, long long)を使用する必要があることを意味しlong longます。

私の質問は、昇進longsize_tて昇進することです。整数の昇格に関する情報源はインターネット上にたくさんありますが、これらの型について言及しているものは見たことがありません。

PS標準への参照をいただければ幸いです。

0 投票する
4 に答える
56165 参照

c++ - 1つのdoubleは、方程式のすべてのintをdoubleに昇格させますか?

1つの浮動小数点データ型(たとえばdouble)が存在することで、すべての+、-、*、/、%などの数学演算が2つのオペランドを想定するようになりますか?

話がそれよりも複雑な場合、これらのルールを説明するリソースはありますか?私はそのような質問をするべきではなく、方程式の結果がであるときに常に明示的にキャストintする必要があります。これが私が考えているいくつかの方程式です。これはコンパイラに依存する可能性のあるタイプであるため、意図的にコンパイルしてシステム上で実行しませんでした。doubledouble

0 投票する
1 に答える
1220 参照

c++ - common_type ではない理由::type = long long?

common_type<long, unsigned long>::typeこれはunsigned long、整数昇格後のオペランドに関して、標準が述べているためです...

[...]符号なし整数型を持つオペランドのランクが他のオペランドの型のランク以上の場合、符号付き整数型のオペランドは符号なし整数型のオペランドの型に変換されます

整数昇格システムをバグと呼ぶわけではありませんが、符号付きオペランドと符号なしオペランドの両方の範囲を表すことができる、より大きな符号付き整数型がある場合は、それを使用する必要があるようです。

一部のプラットフォームでは long == long long になる可能性があることを知っています。その場合、上記のルールが有効になります。しかし、より大きな符号付き整数型利用可能であれば、それを使用すべきではないでしょうか?

0 投票する
3 に答える
4075 参照

c++ - 整数昇格 - 手順は何ですか

このコードは B2 を出力します

整数昇格について読みましたが、まだ不明です。ここの例ではどのように機能しますか? コンパイラが値を拡大/切り捨てる際に従う手順を誰かが完全に投稿できますか?

0 投票する
5 に答える
922 参照

c++ - 整数型の拡大?

この関数があると想像してください:

これで、呼び出しサイトで次のように呼び出します。

なぜ、(技術的に) 関数の宣言で a を期待していることを指定しlong、接尾辞なしで数値だけを渡すと、Lそれは として扱われるのintですか?

さて、C++ 標準がそう言っているためであることはわかっていますが、これ65が型に昇格されただけでなく、サフィックスをlong忘れて明示的に long にするというばかげたエラーを回避する技術的な理由は何ですか?L

C++標準でこれを見つけました:

4.7 積分変換 [conv.integral]

5 インテグラル プロモーションとして許可されているコンバージョンは、インテグラル コンバージョンのセットから除外されます。

縮小変換が暗黙的に行われていないことは考えられますが、ここでは宛先の型がソースの型よりも明らかに広くなっています。

編集

この質問は、サフィックス を指定しなかった場合に奇妙な動作があった、以前に見た質問に基づいています。Exampleですが、おそらくそれは C++ よりも C のことでしょうか?!!L

0 投票する
1 に答える
1196 参照

c++ - 整数拡張、符号付き/符号なし、およびprintf

私はC++整数のオーバーフローとプロモーションを調べていて、それを複製しようとしましたが、最終的には次のようになりました。

上記coutの投稿を読んだ後、私が期待したことを実行します。2番目の投稿も同様printfです。どちらも4294967291を印刷printfします。ただし、最初の投稿は-5を印刷します。さて、これはprintf単に4294967291の符号なしの値を符号付きの値として解釈し、最終的に-5になると思います(4294967291の2の補数が11 ... 11011であることがわかります)が、私は100ではありません%私は何も見逃していないと確信しました。それで、私は正しいですか、それともここで何か他のことが起こっていますか?

0 投票する
5 に答える
32231 参照

c - 型変換 - unsigned から signed int/char へ

以下のプログラムを実行してみました。

このプログラムでは、次の出力が得られます。

文字は違います!!! intは同じです!!!

両方で異なる出力が得られるのはなぜですか?
出力は次のようになりますか?

文字は同じです!!! intは同じです!!!

コードパッド リンク