Если испытываешь проблемы с написанием постов, есть пиздатый лайфхак!
А далее пост пишется на одном дыхании. Кстати этот способ отлично работает для всяких документаций, планирования спринтов и т.п.
Ну чо — Короче блядь. Пятничная математика!
Массив bin содержит 256 восьмиразрядных чисел в двоичной системе счисления.
bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
echo ${bin[101]}
Получаем: 01100101
Количество разрядов двоичного числа (длина любого индекса)
echo ${#bin[0]}
Получаем: 8
Количество двоичных чисел (длина массива)
echo ${#bin[@]}
Получаем: 256
{0..1}{0..1}. Но будь очень осторожен, память не резиновая!Раз зашел разговор за память…
echo $((2**63))
Иииииии… Получаем по ебалу: -9223372036854775808
А почему так? Минус каким хером тут? А все правильно!
Эта ситуация называется — Целочисленное переполнение. И оно НЕ отслеживается в Bash!
help let
Начиная с версии 2.05b-alpha1 используется тип intmax_t.
This document details the changes between this version, bash-2.05b-alpha1, and the previous version, bash-2.05a-release.
The shell now performs arithmetic in the largest integer size the machine supports (intmax_t), instead of long.
Ну и смотрим маны:
man 7 system_data_types
Давай затестим:
echo "Диапазон: От $((2**63)) до $((2**63-1))"
У меня такое: -9223372036854775808 до 9223372036854775807
Это границы для положительных и отрицательных чисел.
Чо еще…
Перевод из двоичной системы счисления в десятичную.
echo $(( 2#1000 ))
Получаем: 8
В арифметических операциях Bash можно задавать систему счисления.
echo $(( 2#1000 + 2#1000 ))
let dec=2#0001
echo $dec
В общем случае в данных конструкциях не обязательно указывать знак $ перед именем переменной. Но при указании системы счисления это всё же нужно.
bin=0011
echo $(( 2#$bin ))
Получаем: 3
Наверное на этом всё, если есть что добавить, пиши в комменты. Хороших тебе предстоящих выходных и береги себя!








Комментарии