Если испытываешь проблемы с написанием постов, есть пиздатый лайфхак!

А далее пост пишется на одном дыхании. Кстати этот способ отлично работает для всяких документаций, планирования спринтов и т.п.

Ну чо — Короче блядь. Пятничная математика!

Массив 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

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Разрядность можно регулировать количеством списков начиная с {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

Наверное на этом всё, если есть что добавить, пиши в комменты. Хороших тебе предстоящих выходных и береги себя!