C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で倍精度浮動小数点数を64ビット符号付き整数に変換する方法

C#では、BitConverter.DoubleToInt64Bits()メソッドを使用することで、指定された倍精度浮動小数点数(double型)を64ビットの符号付き整数(long型)に変換できます。このメソッドは、double型の値をIEEE 754形式のビットパターンとして解釈し、それをそのままlong型の整数として返します。

基本的な構文

public static long DoubleToInt64Bits (double value);

引数には変換対象の倍精度浮動小数点数を指定し、戻り値としてそのビットパターンを表す64ビット符号付き整数が返されます。

サンプルコード

以下は、double型の値を64ビット符号付き整数に変換する例です。

using System;
public class Demo {
   public static void Main() {
      double d = 5.646587687;
      Console.Write("Value = " + d);
      long res = BitConverter.DoubleToInt64Bits(d);
      Console.Write("\n64-bit signed integer = " + res);
   }
}

実行結果

Value = 5.646587687
64-bit signed integer = 4618043510978159912

このように、元の浮動小数点数「5.646587687」が、その内部ビット表現に対応する整数値「4618043510978159912」へと変換されていることがわかります。

別の例

もう一つ、小さな値での変換例を見てみましょう。

using System;
public class Demo {
   public static void Main() {
      double d = 0.001;
      Console.Write("Value = " + d);
      long res = BitConverter.DoubleToInt64Bits(d);
      Console.Write("\n64-bit signed integer = " + res);
   }
}

実行結果

Value = 0.001
64-bit signed integer = 4562254508917369340

補足:逆変換について

なお、変換した整数値を再びdouble型に戻したい場合は、BitConverter.Int64BitsToDouble()メソッドを使用します。これにより、元の浮動小数点数を正確に復元することが可能です。

double restored = BitConverter.Int64BitsToDouble(res);

この手法は、浮動小数点数のビットレベルの操作や、バイナリデータとしてのシリアライズ・比較などを行いたい場合に特に役立ちます。

  1. JavaScriptで文字列を浮動小数点数に変換する方法【parseFloat()の使い方と注意点】

    JavaScriptには、文字列を浮動小数点数(小数)に変換するための組み込みメソッドとしてparseFloat()が用意されています。同じように文字列を数値へ変換できるparseInt()というメソッドもありますが、こちらは整数のみを返すため、小数部分は切り捨てられてしまいます。小数を扱いたい場合はparseFloat()を使うのが適切です。なお、parseFloat()に数値を表さない文字列を渡した場合、戻り値はNaN(Not a Number)になります。構文parseFloat(Value);引数には数値を表す文字列を渡します。先頭から数値として解釈できる部分を読み取り、浮動小数点数と

  2. C言語で浮動小数点数のセットビット数を数える方法を解説

    この問題では、1つの浮動小数点数が与えられ、その2進表現におけるセットビット(1になっているビット)の数を求める必要があります。例えば、浮動小数点数が 0.15625 の場合、セットビットは6個になります。一般的なCコンパイラでは、単精度浮動小数点形式で数値が表現されるため、メモリ上では次のようなビット列として格納されます。考え方:ポインタとバイト単位での処理浮動小数点数をビット値に変換して調べるには、まず対象の数値をポインタ変数に渡し、そのポインタを char* 型にキャストします。こうすることで、float型のデータを1バイトずつ順番に処理できるようになり、各バイト(char型)ごとのセッ