Почему `bc` игнорирует мой` obase`?

442
Alan H.
>>> bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.  ibase = 16  obase = 56 BE753DE5C17F1B6C9F5D1E8A628B74B0FFC4A7 13 54 52 19 83 18 71 14 32 84 08 11 54 04 20 50 49 70 30 00 29 44 7\ 7 33 

Ввод явно в шестнадцатеричном виде. Теперь я предполагаю, что выходные данные должны быть десятичными представлениями «цифр» в базе 56. Но тогда максимальный выходной блок должен быть 55, верно? Так почему я вижу «83» и «84»?

2
Если ввести «38» (гекс - 3 × 16 + 8 = 56), я ожидаю получить «10» обратно. Но это возвращает мне «56». Так какого черта, почему он игнорирует мои настройки `obase`? Alan H. 12 лет назад 0

1 ответ на вопрос

5
maiklos

Объявление ibase16 ставит bcв шестнадцатеричный режим, поэтому ваша следующая строка:

obase = 56 

на самом деле интерпретируется как шестнадцатеричный: 0x56= 86 в десятичном виде, поэтому ваши выходные «цифры» включают значения до, но не более 85.

Меняем местами порядок, в котором вы объявляете ibaseи obaseрешаете это:

obase = 56 ibase = 16 BE753DE5C17F1B6C9F5D1E8A628B74B0FFC4A7 01 27 46 38 00 54 21 49 15 55 31 13 08 39 08 26 31 35 14 01 25 24 0\ 6 13 11 36 07 

а также:

38 01 00 
(Сначала был действительно смущен, но отредактировал ваш ответ для ясности после того, как понял, что вы имели в виду! Спасибо!) Alan H. 12 лет назад 0