2009-07-24 8 views
0

C/C++ doubleを64ビットの2の補数に変換する必要があります。ここで、基数はビット番号19になります。C/C++での数値変換

これは私が

  • 0000 0000 0010 0000に変換したい形式の番号1
  • が0xFFFF FFFF FFF0 0000が多数であることを-1
  • 0000 0000 0000 0001は0.95であることを意味します×10^-6
  • が0xFFFF FFFF FFFF FFFFである-0.95×10^-6

これまでのところ私きたもののCからMODF機能の使用方法について標準的なライブラリですが、それは本当に私のニーズをカバーしていません。私はBoostのいくつかの型変換クラスについても見てきましたが、そこには適切な解決策も見つかりませんでした。ライブラリを知っている人や、この変換を行う簡単な方法はありますか? Boostをよりよく知っている人が私を正しい方向に向けることができます。

thisが役に立った場合、ここにダブルスがどのように格納されているかのドキュメントがあります。

編集:

私がフォローアップの質問があり、これは私自身の利益のために実際にあります。 「基数」とは何ですか?ここでは小数点のようなものです。しかし、私がRadixという言葉を聞いた唯一の唯一の時間は、Discrete Fast Fourier Transformについて学んだときでした。私が正しく覚えていれば、DFTを計算するのに必要な乗算が少なくて済むため、Radix-II法は高速です。その後、2^20による

答えて

4

に変換する。これは、あなたが望む結果を与える必要があります:

double d = someValue(); 
int64_t fixed_point = static_cast<int64_t>(d * (1024*1024)); 
+0

を私はD」の書き込みを好むだろう* 0x100000 "と表示されています。しかし、個人的な味。 – VoidPointer

+0

良い点。実生活では、それが複数の場所で使用されることが予想され、おそらく名前付き定数でなければなりません。しかし、44.20ビットの固定小数点の場合、16進リテラルはおそらく10進数よりも明確です。 –

1

乗算して、ターゲティング整数型(おそらく長い長い)

関連する問題