2015-03-29 2 views
-1

Есть ли способ вычислить двоичное представление десятичного числа, изначально в Bash, не прибегая к внешним программам, таким как bc?Native Decimal to Binary conversion

Пример: Предположим, у меня есть 5 в базе 10: Я хочу получить 101 в базе 2.

Почему используя bc не вариант: выполнение цикла.

+2

[См этот ответ на вопрос, связанный] (http://stackoverflow.com/a/25943519/548225) – anubhava

+0

@anubhava Вопрос вы связаны не оговаривает Ограничить Рождественского. Ответ, который вы связываете, работает только для чисел [0, 255] - комментарий, добавленный к этому ответу, объясняет, как повысить этот предел, однако он довольно неудобен и неэффективен, поэтому этот вопрос должен храниться для сбора соответствующих ответов. – davide

+0

Если вы отредактируете вопрос, чтобы выяснить, почему использование 'bc' не является опцией, тогда обязательно этот вопрос можно открыть. – anubhava

ответ

1

Используйте арифметические операторы bash, а не таблицу поиска. Например

#!/bin/bash 

d2b() { 
    local bits= 
    local num=$1 
    while [[ $num != 0 ]] 
    do 
      if (($num & 1)) 
      then 
        bits="1$bits" 
      else 
        bits="0$bits" 
      fi 
      let num=$(($num >> 1)) 
    done 
    echo ${bits:=0} 
} 

for n in $* 
do 
    d2b $n 
done 
+1

Да, это сработает –