単二電池

コマンドライン引数から10進数の値を入力して
2進数に変換して出力しようとしています。
※入力される10進数の値はかなり大きなものを想定しています。

現在は下記のようなコードで変換しようとしていますが失敗しています。
動作環境は『WindowsXP、Activeperl-5.12.4.1205』です。

拙い説明ですが、よろしくお願いいたします。


# コマンドライン引数は「9223372036854775808」

$n = unpack("B8", pack("C", $ARGV[0]));
print n;

# 実行結果は「11111111」
# 期待している出力結果は「1000・・・000」(←0が64個)


9223372036854775808

A 回答 (3件)

桁あふれをおこしているようですから、自力で書き換えるしかないかと思います。


サンプルの数字は、16進数では 0x8000_0000_0000_0000 ですから、
0 の数は 63、1を含めて 64 桁ですね。

#! perl %~f1 9223372036854775808

our $decimal = shift;
print $decimal, "\n";
my $dec = $decimal;
my @bin = ();
while ($dec > 0) {
unshift (@bin, sprintf("%d",($dec % 2)));
$dec = int($dec / 2);
}
print "0b", join('', @bin), "\n";
    • good
    • 0

No.1さんがおっしゃるようにbigintでいいんじゃないでしょうか?



use bigint;

my $n = 0 + $ARGV[0];
print substr $n->as_bin, 2;
    • good
    • 1

bigint なり Math::BigInt なりを使う?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!