問題タブ [signedness]

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 に答える
500 参照

c - 定数のgcc暗黙の符号

定数の符号に関する gcc の解釈で、いくつかの興味深い動作に遭遇しました。以下のような(大幅に簡略化された)コードがあります。

上記をコンパイルすると、warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

どうやら gcc は 16 進定数を符号なしと解釈し、符号付き整数との比較を好まないようです。ただし、定義を のようなものに変更すると#define SPECIFIC_VALUE 0x7FFFFFFF、警告が消えます。繰り返しますが、私は特に驚くことはありません。符号ビットが 0 であると、gcc は定数を符号付きの値として解釈するのが楽になります。本当に驚いたのは、定義を に変更しても#define SPECIFIC_VALUE INT32_C(0xFFFFFFFF)、まだ警告が表示されることです。定数を符号付きの値として解釈するようにコンパイラに明示的に指示すると、警告が消えます。

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

c - signed int modulo unsigned int はナンセンスな結果を生成します

C で実際の数学的剰余を実行する必要があります。剰余計算で負の中間結果が生成される可能性があるため、モジュール化された引数に負の数を許可することは理にかなっています。これは最小剰余系に戻す必要があります。しかし、負のモジュールを許可するのは意味がないので、私は書きました

ただし、負の数と正のモジュールでそのような関数を呼び出す

出力を生成する

そして、私はその理由を理解していません。説明していただけますか?

編集: 演算子 % は数学的モジュロとは異なることを知っており、正数と負数に対してそれがどのように定義されているかを知っています。私は、異なるサインではなく、異なるサインネスに対してそれが何をするかを尋ねていました。

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

c++ - Visual Studio 2015: std::make_unique に符号付き/符号なしの不一致の警告はありませんか?

コードにバグを見つけたばかりで、それが発生する可能性があることにかなり困惑しています。これは、単純な符号付き/符号なしの不一致であるためです。これは、警告レベル 4、警告をエラーとしてコンパイルしているため、まったく発生しないはずです。だから私はそれを再現しようとしましたが、これは非常に簡単です:

今、私は自問自答しています: これの理由は何ですか? VS のバグですか、それとも std::make_unique の一般的な欠点ですか? それを修正する方法はありますか?(Visual Studio 2015 コミュニティ アップデート 3)