LINUX.ORG.RU

Представление десятичного числа в двоичной и 16-ричной системах счисления.

 


0

1

Знаю, что можно вычислить проще - через калькулятор bc, но я попытался, всё-таки, решить эту задачу логически. http://pastebin.ru/w8gbJFaS
Представление в двоичной системе исчисления, разбиение на тетрады и из двоичной системы перевод в 16-ричную. Как можно оптимизировать код? Такая, своего рода, логическая игра. Не проще было бы создать массив из тетрад?



Последнее исправление: bitness (всего исправлений: 4)

value=1443

digits=(0 1 2 3 4 5 6 7 8 9 a b c d e f)

result=

while true; do
	result=${digits[$((value % 16))]}$result
	value=$((value / 16))
	[[ $value -eq 0 ]] && break
done

echo $result
geekless ★★
()

Получился отличный тред-детектор тех, кто не читает на отвечаемый пост. Спасибо тебе, ТС.

geekless ★★
()
Ответ на: комментарий от post-factum

Т.е., цель — не результат, а процесс? Значит, я неправильно понял.

Абсолютно. Это тоже игра.

bitness
() автор топика
Ответ на: комментарий от geekless

Ты молодец. Твой код, явно, короче.

Сказывается фактическое отсутствие опыта программирования =(

bitness
() автор топика
Ответ на: комментарий от geekless

У меня же там еще разделение на тетрады. Дописывание нулей до полной четырехбитной тетрады, если не хватает чисел.

bitness
() автор топика
Ответ на: комментарий от bitness

И подсчет количества столбцов. Не знаю, как это сделать короче.

bitness
() автор топика
Ответ на: комментарий от anonymous

тс не создает впечатление адекватного человека

А что на выходных делать?

bitness
() автор топика
Ответ на: комментарий от bitness
to_base()
{
	value=$1 ; base=$2 ; align=$3
	digits=(0 1 2 3 4 5 6 7 8 9 a b c d e f)
	result=
	while true; do
		result=${digits[$((value % $base))]}$result
		value=$((value / $base))
		[[ $value -eq 0 ]] && [[ $((${#result} % $align)) -eq 0 ]] && break
	done
	echo $result
}

to_base 1443 16 1
to_base 1443 2 4
geekless ★★
()
Ответ на: комментарий от anonymous

// тс не создает впечатление адекватного человека

Скорее всего, это хитрый школьник/студент, решивший таким способом получить решение задачи. Я обычно благотворительностью не занимаюсь, но хрен с ним, за небанальный подход, пусть забирает.

geekless ★★
()
Ответ на: комментарий от geekless

Скорее всего, это хитрый школьник/студент

не угадал.

bitness
() автор топика
Ответ на: комментарий от geekless

Я немного по-другому делал - переводил из двоичной в 16-ричную.

bitness
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.