タグ付けされた質問 「signed」


17
std :: vectorの反復:符号なしvs符号付きインデックス変数
C ++でベクトルを反復処理する正しい方法は何ですか? 次の2つのコードフラグメントを検討してください。これは正常に機能します。 for (unsigned i=0; i < polygon.size(); i++) { sum += polygon[i]; } そしてこれ: for (int i=0; i < polygon.size(); i++) { sum += polygon[i]; } を生成しwarning: comparison between signed and unsigned integer expressionsます。 私はC ++の世界で新しいので、unsigned変数は少し恐ろしいように見え、unsigned正しく使用しないと変数が危険である可能性があることを知っています。これは正しいですか?
470 c++  stl  unsigned  signed 

15
符号付き整数と符号なし整数
符号付き整数と符号なし整数の違いは次のとおりです。 符号なしは、より大きな正の値を保持でき、負の値は保持できません。 符号なしでは、先頭ビットを値の一部として使用しますが、符号付きバージョンでは、左端のビットを使用して、数値が正か負かを識別します。 符号付き整数は、正数と負数の両方を保持できます。 他に違いはありますか?

6
なぜ0 <-0x80000000なのですか?
以下に簡単なプログラムを示します。 #include &lt;stdio.h&gt; #define INT32_MIN (-0x80000000) int main(void) { long long bal = 0; if(bal &lt; INT32_MIN ) { printf("Failed!!!"); } else { printf("Success!!!"); } return 0; } 条件if(bal &lt; INT32_MIN )は常に真です。どのようにして可能ですか? マクロを次のように変更すると正常に動作します。 #define INT32_MIN (-2147483648L) 誰でも問題を指摘できますか?


11
〜x +〜y ==〜(x + y)は常にfalseですか?
このコードは常にfalseと評価されますか?どちらの変数も2の補数の符号付き整数です。 ~x + ~y == ~(x + y) 条件を満たす数はあるはずだと思います。私は間の数字をテストしようとした-5000と5000が、平等を達成したことがありません。条件の解を見つけるための方程式を設定する方法はありますか? 片方をもう片方に交換すると、プログラムに潜むバグが発生しますか?

8
C ++は16進文字列を符号付き整数に変換します
16進文字列をC ++で32ビットの符号付き整数に変換したい。 したがって、たとえば、16進数の文字列 "fffefffe"があります。これのバイナリ表現は11111111111111101111111111111110です。これの符号付き整数表現は-65538です。 C ++でこの変換を行うにはどうすればよいですか?これは、負でない数に対しても機能する必要があります。たとえば、16進数の文字列「0000000A」は、2進数で00000000000000000000000000001010、10進数で10です。
135 c++  integer  hex  signed 


2
C ++ 20でstd :: ssize()が導入されたのはなぜですか?
C ++ 20std::ssize()は以下のように無料関数を導入しました: template &lt;class C&gt; constexpr auto ssize(const C&amp; c) -&gt; std::common_type_t&lt;std::ptrdiff_t, std::make_signed_t&lt;decltype(c.size())&gt;&gt;; 可能な実装はcl ass Cのメンバー関数のstatic_cast戻り値を対応する符号付きに変換するためにを使用しているようです。size() size()C のメンバー関数は常に非負の値を返すので、なぜ誰かがそれらを符号付き変数に格納したいのでしょうか?本当に望んでいる場合、それは単純な問題ですstatic_cast。 なぜstd::ssize()C ++ 20で導入されたのですか?
99 c++  stl  unsigned  signed  c++20 

5
符号付き/符号なしの比較
次のコードが指定された場所で警告を発行しない理由を理解しようとしています。 //from limits.h #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ /* = 0x7fffffff */ int a = INT_MAX; //_int64 a = INT_MAX; // makes all warnings go away unsigned int b = UINT_MAX; bool c = false; if(a &lt; …

12
C / C ++での署名付きオーバーフローの検出
一見すると、この質問は整数オーバーフローを検出する方法の複製のように見えるかもしれません。ただし、実際には大幅に異なります。 符号なし整数オーバーフローの検出は非常に簡単ですが、C / C ++での符号付きオーバーフローの検出は実際にはほとんどの人が考えるよりも難しいことがわかりました。 それを行う最も明白でありながら素朴な方法は、次のようになります。 int add(int lhs, int rhs) { int sum = lhs + rhs; if ((lhs &gt;= 0 &amp;&amp; sum &lt; rhs) || (lhs &lt; 0 &amp;&amp; sum &gt; rhs)) { /* an overflow has occurred */ abort(); } return sum; } これに伴う問題は、C標準によれば、符号付き整数オーバーフローは 未定義の動作であるということです。 言い換えると、標準によれば、符号付きオーバーフローが発生するとすぐに、プログラムはnullポインターを逆参照した場合と同じように無効になります。したがって、上記の事後条件チェックの例のように、未定義の動作を引き起こして、事後にオーバーフローを検出しようとすることはできません。 上記のチェックは多くのコンパイラで機能する可能性がありますが、信頼することはできません。実際、C標準では符号付き整数オーバーフローは未定義であるとされているため、一部のコンパイラ(GCCなど)は上記のチェックを最適化します。、最適化フラグが設定されると、符号付きオーバーフローは不可能であると想定するため、を最適化します。これにより、オーバーフローをチェックする試みが完全に中断されます。 …

6
符号なし変数に負の値を割り当てるとどうなりますか?
符号なし変数に負の値を割り当てるとどうなるか知りたいと思いました。 コードは次のようになります。 unsigned int nVal = 0; nVal = -5; コンパイラエラーは発生しませんでした。私がプログラムを実行したときnVal、奇妙な値が割り当てられました!2の補数の値が割り当てられる可能性がありnValますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.