答えて
それは符号なし整数リテラル定数を定義する方法です。
"unsigned int"を意味しますが、基本的には、数値定数がコンパイル時に適切な型に変換されるようにキャストのように機能します。
これは、定数1が符号なし整数として使用されることをコンパイラに知らせる方法です。いくつかのコンパイラでは、 'u'のような接尾辞のない数字はint型であると仮定しています。この混乱を避けるために、定数を符号なし整数として使用する場合は、「u」のような接尾辞を使用することをお勧めします。他の同様の接尾辞も存在する。たとえば、floatの場合は 'f'が使用されます。
Cコードの1
のような整数リテラルは、常にタイプint
です。 int
はsigned int
と同じものです。リテラルにu
またはU
(同等)を追加して、さまざまな予期しないバグや奇妙な動作を防ぐために、unsigned intであることを保証します。そのようなバグの
一例:intは16ビットであり、この式が負の値になり、16ビットマシン上で
:
long x = 30000 + 30000;
両方30000個のリテラルがintであり、そして両方のオペランドがintなので、結果はintになります。 16ビットの符号付き整数は32766までの値しか格納できないため、オーバーフローします。 x
は、予想通り60000ではなく、これにより奇妙な負の値を取得します。予想通り
コード
long x = 30000u + 30000u;
は、しかし、動作します。
「この式は負の値になります」。整数オーバーフローは未定義の振る舞いであるため、井戸か悪魔があなたの鼻から飛び出します。 – ouah
@ouah理論的にはそうです。現実の世界では、私が見たコンパイラはすべて同じように整数オーバーフローを処理します。とにかく、結果にかかわらずバグです。 – Lundin
整数のオーバーフローが定義されていないという事実は、理論的なことだけではありません。現実の世界であっても、コンパイラは整数オーバーフローを利用して未定義の動作を行って最適化を実行します。たとえば、gccには少なくとも20のケースがあり、最適化を実行できるように整数オーバフローをラップするとはみなされません。単純な例は 'a-8 <42'のような式です。もし' a'が符号付き型 'gcc'なら' a <50'に式を減らすことができます。 – ouah
- 1. Gitの引数@ {u}は何を意味していますか?
- 2. 「u」記号は文字列の値の前に何を意味しますか?
- 3. 'git push -u origin master'の '-u'の意味は何ですか?
- 4. 関数プロトタイプの後に - >は何を意味しますか?
- 5. ライブラリーの背後にある数字は何を意味していますか?
- 6. UNIXタイムスタンプの最後の数字は何を意味しますか?
- 7. 各スタックトレース行の最後の数字は何を意味しますか?
- 8. rsyncの出力の数字は何を意味しますか?
- 9. 何かは何か=何か==数字を意味しますか? Javaでの式
- 10. eslintルール配列の数字は何を意味しますか?
- 11. AndroidのHTTPユーザーエージェントヘッダーでは、「U」は何を意味していますか?
- 12. この文の最初の<U>は何を意味しますか?
- 13. クラス名の後に '&'は何を意味しますか?
- 14. ファイル拡張子の後に〜は何を意味しますか?
- 15. ピップインストールで「-U」オプションの意味-U
- 16. 意味は何ですか? C#の変数の後に?
- 17. ドット(。)はOracleの数値の後に何を意味しますか?
- 18. .hファイルの@interfaceの後の{}は何を意味しますか?
- 19. 関数ヘッダの背後にある `const`は何を意味しますか?
- 20. forループの後のif文は何を意味しますか?
- 21. インスタンスの後の 'C_#'は何を意味しますか?
- 22. U接尾辞の意味
- 23. 改行文字はコンピュータに何を意味しますか
- 24. 正規表現のバックスラッシュの後の数字の意味は何ですか?
- 25. 括弧内の数字はcygwin版の後に何を意味しますか?私はcygwinの、オン
- 26. 意味論は何を意味しますか?
- 27. 変数の先頭に '@'は何を意味しますか?
- 28. 関数名の前にアスタリスクは何を意味しますか?
- 29. このRegex文字列は何を意味しますか?
- 30. ecmascript 6の "@"文字は何を意味していますか?
*変換されていません。すでに 'unsigned int'型です。 –
はい、しかし* H2CO3 *は "それは機能します*キャストのように"、彼はそれを言っていない*キャストです! –
私は、 "u"がなければ、それは整数定数のデフォルトであるので署名されることを意味します。だからtge uは、コンパイラが署名されていないとみなすことを通知するものです。私はそれがキャストではないことを知っています、それはより良い理解のための唯一のサンプルでした。 –