uint64_t x(1 << 35)
は、出力として0
と警告を出します。そのような大きな値を初期化するのに最も適切なものは何でしょうか?C++でuint64_tを初期化する方法11
3
A
答えて
9
1 << 35
はint
を使用しているためです。 64ビットタイプを使用する場合は、1ULL << 35
を使用して、少なくとも64ビットであることが保証されているunsigned long long
を使用して操作していることを確認してください。
2
問題は、コンパイル時定数式1 < < 35がint型で実行されることです。だからあなたはそのタイプのオーバーフローしている可能性があり、その動作は未定義です!
最も簡単な修正は、1ULL < < 35を使用することです。符号なしlong longリテラルは、少なくとも64ビットでなければなりません。
4
auto x = std::uint64_t(1) << 35;
1
uint64_t x = 1000000000ull;
ULLマーク通常長い長いとのunsigned long長い
int64_t y = 1000000000ll;
と同じ値。
uint64_t x2 = (1ull << 35ull);
は、単にあなたの番号の末尾にULLを追加します。
関連する問題
- 1. C++ 11クラス初期化エラー
- 2. C++ 11値初期化前に集約し、初期化する
- 3. 自動でC++ 11の初期化
- 4. C++ 11の値の初期化子とリストの初期化子
- 5. C++ 11は初期化されたメンバフィールドを再初期化しますか?
- 6. はゼロにベクトルを初期化するC++/C++ 11
- 7. C++ 11メンバ関数をコンパイルしてスレッドを初期化する
- 8. std :: mapの初期化にC++ 11のconstexprを使用する
- 9. C++ <11:静的constクラスメンバを初期化する
- 10. C++ 11関数呼び出しでのベクトルの初期化
- 11. C++構造体の初期化方法
- 12. Cでリストを初期化する方法は?
- 13. このテンプレートペアをC++で初期化する方法は?
- 14. Objective CでNSMutableArrayを初期化する方法は?
- 15. C++で初期化ファイナライザを実装する方法は?
- 16. C++でオブジェクト参照を初期化する方法は?
- 17. VS C++でboost :: edge_weight_t型を初期化する方法
- 18. C#.netでグローバルにREngineを初期化する方法は?
- 19. C++でwchar_tポインタ変数を初期化する方法は?
- 20. C++でstructの配列を初期化する方法は?
- 21. .NET C#WebAPIプログラムでライブラリを初期化する方法
- 22. 構造体のベクトルをC++で初期化する方法
- 23. System.Linq.ExpressionでExpression.Callオブジェクトを初期化する方法C#
- 24. CでSDL_Colorを初期化する方法は?
- 25. 配列メンバーC++用のクラスのデフォルト初期化子11
- 26. (GCC 4.5/4.6付き)C++ 11の初期化構文の問題
- 27. C++ 11:遅延初期化の安全なダブルチェックロック。可能?
- 28. C++ 11の適切な構造の初期化
- 29. 静的順初期化失態、入出力ストリームとC++ 11
- 30. C++ 11関数ローカル静的constオブジェクトのスレッドセーフ初期化
左辺が十分に大きいため、式「1ULL << 35」は無効です。 –
'(static_cast(1)<< 35)はどうですか? –
C++ 11以降では、[ '](https://stackoverflow.com/questions/36406333/fixed-width-integer-literals-in-c)の[新しいリテラルを定義することもできます。このような問題を避けるために使用してください。 –
mceo