Открываешь свой любимый редактор и пишешь — Короче блядь!
А далее пост пишется на одном дыхании. Кстати этот способ отлично работает для всяких документаций, планирования спринтов и т.п.
Ну чо — Короче блядь. Пятничная математика!
Массив 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