TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #405 14.6K
Если испытываешь проблемы с написанием постов, есть пиздатый лайкфак!

Открываешь свой любимый редактор и пишешь — Короче блядь!


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

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

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

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

tags: #bash #linux
—
🔔 @bashdays
More from @bashdays
  1. Sep 30, 2026↗️ Для всех, кто строит 15 октября Cloud․ru соберет инженеров, которые строят и эксплуатир…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →