8.2. Числовые константы | Популярный Linux

Опубликовано Bash в Ср, 23/12/2009 — 20:56


Интерпретатор командной оболочки воспринимает числа как десятичные, в противном случае числу должен предшествовать специальный префикс, либо число должно быть записано в особой нотации. Числа, начинающиеся с символа 0, считаются восьмеричными. если числу предшествует префикс 0x, то число считается шестнадцатиричным. Число, в записи которого присутствует символ #, расценивается как запись числа с указанием основы счисления в виде ОСНОВА#ЧИСЛО.

Пример 8-4. Различные представления числовых констант

  1. #!/bin/bash
  2. # numbers.sh: Различные представления числовых констант.
  3. # Десятичное: по-умолчанию
  4. let «dec = 32»
  5. echo «десятичное число = $dec«             # 32
  6. # Вобщем-то ничего необычного.
  7. # Восьмеричное: числа начинаются с ‘0’ (нуля)
  8. let «oct = 032»
  9. echo «восьмеричное число = $oct«           # 26
  10. # Результат печатается в десятичном виде.
  11. # ——— —— — ——-
  12. # Шестнадцатиричное: числа начинаются с ‘0x’ или ‘0X’
  13. let «hex = 0x32»
  14. echo «шестнадцатиричное число = $hex«      # 50
  15. # Результат печатается в десятичном виде.
  16. # Другие основы счисления: ОСНОВА#ЧИСЛО
  17. # ОСНОВА должна быть между 2 и 64.
  18. # для записи ЧИСЛА должен использоваться соответствующий ОСНОВЕ диапазон символов,
  19. # см. ниже.
  20. let «bin = 2#111100111001101»
  21. echo «двоичное число = $bin«               # 31181
  22. let «b32 = 32#77»
  23. echo «32-ричное число = $b32«              # 231
  24. let «b64 = 64#@_»
  25. echo «64-ричное число = $b64«              # 4094
  26. #
  27. #  Нотация ОСНОВА#ЧИСЛО может использоваться на ограниченном
  28. #+ диапазоне основ счисления (от 2 до 64)
  29. #  10 цифр + 26 символов в нижнем регистре + 26 символов в верхнем регистре + @ + _
  30. echo
  31. echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
  32.                                          # 1295 170 44822 3375
  33. #  Важное замечание:
  34. #  —————
  35. #  Использование символов, для записи числа, выходящих за диапазо,
  36. #+ соответствующий ОСНОВЕ счисления
  37. #+ будет приводить к появлению сообщений об ошибках.
  38. let «bad_oct = 081»
  39. # numbers.sh: let: oct = 081: value too great for base (error token is «081»)
  40. #                  Для записи восьмеричных чисел допускается использовать
  41. #+                 только цифры в диапазоне 0 — 7.
  42. exit 0       # Спасибо Rich Bartell и Stephane Chazelas, за разъяснения.

Запись опубликована в рубрике Без рубрики. Добавьте в закладки постоянную ссылку.