問題タブ [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 投票する
1 に答える
1414 参照

c - C での変数昇格

これらの特定のケースごとに出力が異なる理由を理解するのに問題があります。サンプル コード a では、期待どおりに変数の昇格があり、> 6その結果は ですが、サンプル コード b では、結果は<= 6次のようになります。

出力:

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

c - 特定のビット演算を実行中に uint64_t の上位 32 ビットが 1 になるのはなぜですか?

uint64_tケース番号#2でaの上位32ビットが1に設定されている理由を誰かに説明してもらえますか:

出力:

https://ideone.com/xKUaTe

同じ動作を示さない「同等の」32ビットバージョン(ケース#3および#4)を提供したことに気付くでしょう...

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

c - char と short は代入式で降格される前に int に昇格されますか?

いくつかの調査を行った後、算術式で char と short が内部的に int に昇格されることがわかりました。しかし、そのような整数の昇格が割り当てで内部的に発生するかどうかはまだ疑問です。

(ですから、他の式に関するリンクだけを私に与えないでください。私は、ASSIGNMENT 式の内部で何が起こるかについて質問しています)

Q: 次のうち、社内で発生するのはどれですか?

1、ch1 の値がそのまま ch2 に代入されます。ここでは整数の昇格は行われません。

2, ch1の値をまずint型に昇格(8ビット→32ビット)し、32ビットの値をchar型の8ビットに降格して最終結果。整数の昇格はここで行われます。

私はこの本を見つけました: C Primer Plusの 174 ページには:

「...式に現れると、char と short は、signed と unsigned の両方で、自動的に int に変換されるか、必要に応じて unsigned int に変換されます...」

だから私はそれが 2 であるべきだと思いますが、整数昇格が起こらない 1 であるべきだと誰かが私に言ったのを聞いたことがあります。

私は本当に混乱しています。私を手伝ってくれますか?前もって感謝します。

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

c - Cのリテラルと変数の違いは何ですか(符号付きと符号なしの短い整数)?

私は本Computer Systems: A Programmer's Perspective, 2/Eで次のコードを見たことがあります。これはうまく機能し、目的の出力を作成します。出力は、符号付き表現と符号なし表現の違いによって説明できます。

上記のコードは を生成-1 >= 0uしますが、上記と同じである次のコードは生成しません! 言い換えると、

利回り-1 < 0u。なぜこれが起こったのですか?これは説明できません。

このような同様の質問を見たことがありますが、役に立たないことに注意してください。

PS。@Abhineetが言ったように、ジレンマはに変更shortすることで解決できますint。しかし、この現象をどのように説明できるでしょうか。つまり、-14 バイトでは0xff ff ff ff、2 バイトでは0xff ffです。として解釈される 2 の補数としてそれらを考えるとunsigned、それらは と の対応する値を4294967295持ち65535ます。どちらも 未満ではなく、どちらの場合も、出力は、つまり で0ある必要があると思います。-1 >= 0ux >= u

リトルエンディアン Intel システムでの出力例:

略して:

int の場合:

0 投票する
6 に答える
6598 参照

c++ - unsigned short (乗算) unsigned short が signed int に変換されるのはなぜですか?

が C++11 にunsigned short * unsigned short変換されるのはなぜですか?int

このintコード行で示されているように、 は小さすぎて最大値を処理できません。

MinGW 4.9.2 でのオーバーフロー

なぜなら (ソース)

USHRT_MAX = 65535 (2^16-1) 以上*

INT_MAX = 32767 (2^15-1) 以上*

(2^16-1)*(2^16-1) = ~2^32


このソリューションに問題はありますか?


このプログラム

出力を与える

の上

両方と

これは、これらのコンパイラt*tで に変換されることを証明しています。int


役立つリソース:

Cでの符号付きから符号なしへの変換 - 常に安全ですか?

符号付きおよび符号なし整数の乗算

https://bytes.com/topic/c-sharp/answers/223883-multiplication-types-smaller-than-int-yields-int

http://www.cplusplus.com/reference/climits

http://en.cppreference.com/w/cpp/language/types


編集:次の画像で問題を示しました。

ここに画像の説明を入力