問題タブ [int64]
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.
c++ - Windows および Linux 用の C++ での 64 ビット整数のクロス プラットフォーム定義
Windows (MinGW) および Linux (g++) 用の C++ でクロスプラットフォーム コードを記述しようとしています。Linux では 64 ビット整数を「long」と定義していましたが、MinGW に移行すると、sizeof(long) は 4 バイトを返しました。その後、「long long」または「__INT64」を使用して、MinGW で 64 ビット整数を定義できることを発見しました。2 つの質問があります。
1.-Windows と Linux の両方で 64 ビット整数を定義する最も移植性の高い方法は何ですか? 現在 #ifdef を使用していますが、これが最適な方法かどうかはわかりません。
2.- MinGW で「long long」または「__INT64」を使用する必要がありますか? なぜ?
printing - fmtを使用してGoで定数uint64を出力するにはどうすればよいですか?
私は試した:
fmt.Printf("%d", math.MaxUint64)
しかし、次のエラーメッセージが表示されました:
定数 18446744073709551615 オーバーフロー int
どうすればこれを修正できますか? ありがとう!
c++ - 32 ビット システムで int32_t の代わりに int64_t を使用すると、パフォーマンスにどのような影響がありますか?
私たちの C++ ライブラリは現在、時間値を保存するために time_t を使用しています。一部の場所では 1 秒未満の精度が必要になり始めているため、いずれにせよ、より大きなデータ型が必要になります。また、場所によっては 2038 年問題を回避するのに役立つ場合もあります。そのため、基になる int64_t 値を持つ単一の Time クラスに完全に切り替えて、すべての場所で time_t 値を置き換えることを考えています。
このコードを 32 ビット オペレーティング システムまたは 32 ビット CPU で実行した場合の、このような変更によるパフォーマンスへの影響について疑問に思っています。IIUC コンパイラは、32 ビット レジスタを使用して 64 ビット演算を実行するコードを生成します。しかし、これが遅すぎると、時間の値を処理するためにより差別化された方法を使用しなければならなくなり、ソフトウェアの保守がより困難になる可能性があります。
私が興味を持っていること:
- これらの操作のパフォーマンスに影響を与える要因は何ですか? おそらくコンパイラとコンパイラのバージョンです。しかし、オペレーティングシステムまたはCPUのメーカー/モデルもこれに影響しますか? 通常の 32 ビット システムは最新の CPU の 64 ビット レジスタを使用しますか?
- 32 ビットでエミュレートすると特に遅くなる操作はどれですか? または、減速がほとんどないのはどれですか?
- 32 ビット システムで int64_t/uint64_t を使用するための既存のベンチマーク結果はありますか?
- このパフォーマンスへの影響について自分の経験を持っている人はいますか?
私は主に、Intel Core 2 システム上の Linux 2.6 (RHEL5、RHEL6) 上の g++ 4.1 および 4.4 に興味があります。しかし、他のシステム (Sparc Solaris + Solaris CC、Windows + MSVC など) の状況についても知っておくとよいでしょう。
c - int64_t を 2 つの int32_t に分割してネットワーク経由で送信するにはどうすればよいですか?
int64_t
UDPで2つ送信したいです。これを行うには、それらを 4 要素の配列に格納します。
- [0] - 最初の 32 を下げる
int64_t
- [1] - 最初の上位 32 ビット
int64_t
- [2] - 秒の下位 32 ビット
int64_t
- [3] - 秒の場合は上位 32 ビット
int64_t
送信するための私のコード:
UDP経由で受信int32_t
した後に結合するための私のコード:int64_t
data
最初の数字 ( from
) は常に正しいです。しかし、2番目から得たものprintf
は正しくありません。さらに、それは最初の数に依存しているようです。例:
送信:
from
= 125,to
= 20。
受け取った:
from
= 125,to
= 125。
送信:
from
= 1252、to
= 20。
受け取った:
from
= 1252、to
= 1268。
私は何を間違っていますか?変換またはネットワーク経由での送信の問題ですか?