問題タブ [long-long]
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 - printfを使用してunsignedlonglong intをどのようにフォーマットしますか?
出力:
この予期しない結果は、を印刷した結果だと思いunsigned long long int
ます。どうprintf()
ですかunsigned long long int
?
c - 「long long」とはどのようなデータ型ですか?
このタイプは知りません。それはすべての中で最大のものですか?整数型だと思いますよね?それとも浮動小数点ですか?倍より大きい?
gcc - -pedantic を GCC コマンドラインに追加することは可能ですか?
私は主に GCC を使用してライブラリを開発していますが、クロスコンパイラの互換性と、特に標準への準拠を可能な限り確保したいと考えています。このために、-W...
コマンド ラインにいくつかのフラグを追加しました。も追加しますが、タイプ-pedantic
に関する警告に問題があります。long long
後者は私のライブラリにとって重要であり、#if
コードで適切に保護されています。つまり、それを知らないコンパイラではコンパイルされません。
要するに、GCCモードで、拡張子以外-pedantic
の拡張について警告することはできますか? long long
c - long long と int の乗算
次のスニペットがあるとします。
MinGW GCC 3.4.5 での出力は (-O0) です。
最初の乗算は、(アセンブラーの出力に従って) 内部で int32 にキャストされます。2 番目の乗算はキャストされません。プログラムが IA32 で実行されていたために結果が異なるのか、それとも C 標準のどこかで定義されているために結果が異なるのかはわかりません。それにもかかわらず、この正確な動作がどこか (ISO/IEC 9899?) で定義されているかどうかに興味があります。手動でキャストする必要がある理由とタイミングをよりよく理解したいからです (別のアーキテクチャからプログラムを移植する際に問題があります)。
c++ - longlong値を返す
出力は734294471です。呼び出しを番号に置き換えるとtest()
、出力は期待どおりになります。デバッガーを使用してxの値を確認しましたが、関数によって返される値に設定されていませんでした。何が問題になっていますか?
VisualStudio2010をVisualC++コンパイラで使用しています。
c++ - unsigned_int64のsprintf
私は次のコードを持っています。sprintfの2番目の%dの出力は、常にゼロとして表示されます。間違った指定子を指定していると思います。誰かが正しい値で文字列を書くのを手伝ってくれますか?そして、これはposix標準で達成する必要があります。入力ありがとうございます
出力:
gcc - ロングロングへのキャスト(GCC)
これは機能しません。正しい方法は何ですか?
c++ - 8 バイト ワードの上位 4 バイトを取得する
掛けて0x1d400 * 0xE070381D
います。
電卓でこれを行うと、結果は0x00019A4D26950400
これをcppで実装しようとしたとき、これが私が持っているものです。
このコードの結果はd = 0x26950400
. これは下位 4 バイトだけです。他はどうなりましたか?
上位 4 バイトを分離0x00019A4D
して別の変数に保存しようとしています。これはどのように行うことができますか?
乗算で 8 バイトすべてを表示できた場合、上位 4 バイトを分離するために考えていたことは次のとおりです。
これは機能しますか?
c++ - 64 ビット環境での長い移植問題へのポインタ変換
アプリケーションを 32 ビットから 64 ビットに移植しています。
C++ですが、Cスタイルコーディング(レガシー品)です。値を格納するためにユニオンと構造体の組み合わせが使用されているという問題があります。ここでは、任意の基本データ型のデータを保持する「Any」というカスタム データ型が使用されます。Any の実装は次のとおりです。
ユニオンのサイズは 8 バイトです。彼らはユニオンを使用して、特定の時点で値が 1 つだけになるようにし、構造体を使用して型を区別しました。double、long、string、char、float、および int の値をいつでも格納できます。それがアイデアです。double 値の場合、値は any_double に格納されます。他のタイプの場合は「データ」に保存され、値のタイプは「id」に保存されます。「記号」は、値「Any」が double または別の型を保持しているかどうかを示します。any_any はコード内で自由に使用され、型に関係なくアドレス空間に値をコピーします。(ある時点で何が保持されるかわからないため、これが最大の問題です!)
その文字列またはポインタ「Any」が保持されると想定される場合、それは「data」(long 型) に格納されます。64 ビットでは、ここに問題があります。ポインタは 8 バイトです。そのため、"long" を同等の 8 バイト (long long) に変更する必要があります。しかし、そうすると共用体のサイズが 16 バイトに増加し、「any_any」を自由に使用すると問題が発生します。「any_any」の使用法が多すぎて、何を保持できるかわかりません。
私はすでにこれらの手順を試しましたが、うまくいきませんでした:
1. 構造体で「長いデータ」を「長い長いデータ」に変更しました。- これにより、データを「any_any」(8 バイト) として渡すことはできなくなります。
2. 構造体を共用体内のポインターとして宣言しました。そして、構造体内の「長いデータ」を「長い長いデータ」に変更しました。- ここで発生した問題は、構造体にメモリを割り当てる必要があるポインターであるためです。「any_any」を自由に使用すると、メモリの割り当てが難しくなります。場合によっては、メモリを上書きして値を消去することがあります。
3. 「データ」の値 (キーと値のペア) を保持する別のコレクションを作成します。- この実装はアプリケーションの中核であるため、これは機能しません。コレクションは数百万のデータに実行されます。
誰でもこれで私を助けることができますか?
c - Cコンパイラがlongを32ビットに、long longを64ビットに指定するのはなぜですか?
長い64ビットを作成し、128ビットの数値が現実になるまで長く予約する方が理にかなっているのではないでしょうか。