将十进制100转换为二进制100

时间:2018-11-16 21:13:49

标签: perl bit-manipulation

我想将十进制数转换为完全相同的二进制数。 例如。十进制(10)到二进制(10)。 将Dec(10000001110000110)转换为二进制(10000001110000110)。

我是perl的新手。我可以想到的Lame方法是将dec转换为字符串,并将string转换为二进制,但是我确信必须有一种更好的方法来实现它。

我正在使用一个函数来获取一个十进制数字数组。

#include<stdint.h>
#include<stdio.h>

static inline uint64_t rdtscp( uint32_t & aux )
{
    uint64_t rax,rdx;
    asm volatile ( "rdtscp\n" : "=a" (rax), "=d" (rdx), "=c" (aux) : : );
    return (rdx << 32) + rax;
}

请注意,这是十进制数字,因为当我尝试从其元素中减去1时,我得到11110000-1 = 11109999。

我需要二进制格式的文件,以便可以对其进行逻辑与运算。

有人可以提出建议吗?

2 个答案:

答案 0 :(得分:3)

将数字10000001110000110 10 转换为数字10000001110000110 2 非常容易。

  1. 获取数字的十进制表示形式。这就像将数字字符串化一样简单。
  2. 将数字的十进制表示形式传递给例程,该例程将从二进制转换为所表示的数字。 oct('0b'.$_)执行此操作。

解决方案:

my @bad = ( 111110000, 110100010, ... );
my @fixed = map { oct('0b'.$_) } @bad;      # 496, 418, ...

答案 1 :(得分:2)

如果我对您的理解正确,那么您需要这样做:

my $num = 101010;
print interpret_as_binary($num);    # 42

您可以进行将数字除以2的工作,依此类推。或者,您可以利用oct将以0b开头的字符串解释为二进制数。

print oct("0b". $num);