@василий сентяй Во первых я ничего не говорил про С++. Math.floor здесь для наглядности, чтобы когда человек будет писать на своем языке или делить без сдвига, потом не ломал голову почему что-то не работает.
@kkk-tk6gq2 жыл бұрын
@василий сентяй ок
@LithiumDeuteride-6 Жыл бұрын
С битами лучше беззнаковыми целыми работать, но как я понял, в скриптовых ЯП их нет, а в Луа их совсем не было, до версии 5.3.
@timiblaze2 жыл бұрын
Особенно нравится графический стиль подачи. Да и содержание на уровне, без воды. Хоть я и достаточно опытный в этой теме, обязательно буду делиться с начинающими вашими уроками. Спасибо.
@smykoil Жыл бұрын
лесом его, узкая сфера
@дудуит10 ай бұрын
@@smykoilузкое у тебя мышление, а сфера фундаментальная.
@smykoil10 ай бұрын
@@дудуит хд, буквально несколько дней назад посмотрел урок по си у гоши дудоря, и еще немного поизучал. изменил свое отношение ко многим вещам)
@ДаниилАстаев-ы1ю2 жыл бұрын
Ура! Учиться!
@gaky48282 жыл бұрын
Как всегда отлично, Алек. Спасибо за очередной просвещающий ролик. Очень прощу продолжить серию роликов о Ассемблере, спасибо.
@some_body_qtyeeuy Жыл бұрын
Единственный человек, который смог мне доходчиво объяснить логику побитовых сдвигов! Я в восторге. Благодарю
@kardanium2 жыл бұрын
Ошибка в видео. В C++ операторы > - это логический сдвиг. Говорю, как программист железячник, который пишет код, наполовину состоящий из всевозможных битовых операций. Ибо у железа полно специальных регистров управления, где различные биты отвечают за работу тех или иных функций железа. В свое время частенько спотыкался на этом, когда делил числа посредством сдвига. Знак терялся и в итоге я ловил баги. Арифметический сдвиг вправо в С++ производится посредством оператора деления на число 2 в степени N, где N - количество битов, на которое нужно произвести сдвиг. Впрочем, некоторые ядра, например ARM, поддерживают инструкции для всех трех видов сдвига. Их либо использует компилятор в зависимости от контекста, либо программист пишет ассемблерные вставки, либо использует intrinsic функции (инструкции процессора, выраженные в виде функций), если таковые имеются в библиотеке программируемой платформы. По поводу преобразования абсолютного индекса искомого бита в индексы строк и колонок. Тут вообще все просто. Колонок у нас 32. Берём младшие шесть бит абсолютного индекса (режем операцией И) - это у нас будет номер бита в конкретной "строке". Берём старшие 26 бит абсолютного индекса (логический сдвиг на шесть бит вправо) - это у нас будет номер "строки" (индекс массива)
@nakidai2 жыл бұрын
Погоди, в смысле полно регистров управления, он же только 1, не?
@kardanium2 жыл бұрын
@@nakidai Железу выделяется участок физического адресного пространства для всевозможных управляющих регистров и аппаратных буферов. Регистры физически находятся в железке, а процессору они представлены как участок памяти. Но это не просто память, так как запись данных в неё меняет поведение железа. Если это, к примеру, звуковуха, то она требует конфигурацию. Например, разрядность аудиоданных, битрейт, громкость, эффекты, микширование и прочее. Все эти конфиги пишутся драйвером в привязанный за железом адресный блок. Производитель железа может сделать разные регистры со всевозможным функционалом. Но чтобы операционная система могла работать с тем, что производитель навыдумывал, производитель пишет драйвер. Драйвер можно представить как некий код, где с одной стороны у него торчит стандартный API, через который его дёргает операционка, а с другой стороны драйвер дергает железо через его регистры.
@nakidai2 жыл бұрын
@@kardanium А, то есть у любого подключаемого к матеру устройстве есть свои регистры? Спасибо, буду знать
@DmitroVialkov2 жыл бұрын
Лучший коммент, дополню его int - это не 32 бита практика умножать/делить сдвигами, это ужасно, Если вам нужно умножать или делить, то именно это и делайте, а сдвиги оставьте для тех мест, где они определяют алгоритм. В 99,9% случаев оптимизатор компилятора сам догадается, что где-то можно оптимизировать операцию, если это технически возможно, а путать колег - не хорошо. также при передаче параметров в функцию тремя битами упакованными в байт, удобней внутри функции не вынимать уже их, а сразу организовать табличный переход к функциям по адресам (автоматное программирование) и быстрее и удобней выйдет, иначе экономия двух байт на стеке при передачи параметров очень странно выглядит.
@kardanium2 жыл бұрын
@@DmitroVialkov Практика умножать/делить сдвигами - это нормально в покоцанных архитектурах, вроде ARM Cortex-M0, так как ни умножать, ни делить они не могут, либо это обойдется слишком расточительно в плане доступных ресурсов, либо в производительности. Или еще хуже - в разработке аппаратных вычислителей под FPGA или ASIC. Там вообще подход "берем старшие N битов результирующего вектора и..." Компиляторы крайне редко оптимизируют вычислительные операции. И уж точно не заменяют "X / 2^N" на "X >> N", даже если целевой процессор не умеет делить аппаратно. На счет шести бит я ошибся. Число 31 вмещается в пять бит. Значит нужно взять младшие пять бит индекса. В реальности ничто не мешает использовать в C++ типы фиксированной ширины: int16_t, int32_t, int64_t вместо int. Но если хочется индекс типа int, то и это не проблема: uint32_t bits[8]; // наши биты int index = 129; // Номер бита, который хотим инвертировать. Нумерация начинается с нуля. // Младшие пять бит индекса в качестве номера "колонки": int column = index & 0x1F; // column = 1 // Старшие биты индекса в качестве номера "строки": int row = (index & ~0x1F) >> 5; // row = 4 // Инвертируем 129й бит bits[row] ^= 1
@bOOOOkash2 жыл бұрын
Больше спасибо, желаю интенсивного развития твоего канала (рост подписчиков и просмотров)! Это было классно!
@diam0nddangel3362 жыл бұрын
Очень классное и полезное видео, я даже оторвался от программирования, чтобы коммент написать
@VitaliyZlobin2 жыл бұрын
В этом видео прекрасно всё) За 25 минут всё понятно, не представляю сколько понадобилось бы времени в универе с заснувшим преподом
@Salomon_li2 жыл бұрын
Мощно, так продолжать, спасибо за столь твою кропотливую работу!
@samiralhnu63362 жыл бұрын
Мне 14 лет и я хочу досконально изучить все, что связано с компьютерами, операционными системами и айти в целом. Чувак, ты отлично помогаешь, спасибо!
@AsdfgAsdfg123632 жыл бұрын
Я тоже. Уже научился питону, c++.
@ТамирланДоудов-в8ш Жыл бұрын
А я уже выучит python, HTML, CSS, Java
@javaproger Жыл бұрын
А я выучил Java и C++ в 12лет 👍
@marin232 Жыл бұрын
@@javaproger какой умничка, выучить синтаксис языка это же так сложно))
@blindboy007 Жыл бұрын
@@marin232и все же он ещё ребенок, вспомни свои 12 лет😢
@ukolove2 жыл бұрын
Очень круто и понятно. Я в асме работал с битами, но вот тут получил хорошие практические примеры и понимание, как можно в высокоуровневых языках делать разные манипуляции. Вроде и знаешь про операции и битовые маски, но когда видишь практические примеры, то всё сразу по полочкам раскладывается. Спасибо огромное за твой труд!
@rorva2 жыл бұрын
Очень ждал новое видео, спасибо. P.S. следующее видео по Assembler-у?
@rorva2 жыл бұрын
@@thetraveler7779 да (продолжение), в кометариях Alek недавно вроде писал, что после следуещего будет видео про Assembler
@rorva2 жыл бұрын
@@thetraveler7779 почему? если я правильно догадываюсь о чем идет речь, то в прошлом видео использовал MASM
@AlekOS2 жыл бұрын
@@rorva Из-за возможной блокировки ютуба ассемблер пришлось перенести. Если всё будет норм, то в июне скорее всего он появится.
@rorva2 жыл бұрын
@@AlekOS Спасибо за ответ)
@heisserkaiser3942 жыл бұрын
следующий ролик от Алека будет о том как руками двигать электроны в компьютере :D в общем просто спасибо тебе Алек за то что ты есть и что снимаешь такой нужный контент )
@МишаБобров-и1з2 жыл бұрын
ООО, новый видосик, сенкс лайк авансом, посмотрю после других роликов Спасибо за годный контент!!
@captain_t0rch6882 жыл бұрын
Круто, не совсем все понял, но понял что побитовые операторы довольно полезная штука)
@avr_stm_pro29552 жыл бұрын
Если программируешь микроконтроллеры побитовые операторы используется постоянно
@pavlomukosieiev65882 жыл бұрын
Понятное и простое объяснение сложной темы! Спасибо.
@lemuriets2 жыл бұрын
До этого видео вообще не понимал, зачем нужны битовые операции, но после просмотра будто прозрел. Спасибо за качественный контент
@nakamasama2 жыл бұрын
Раньше мне не приходилось ещё работать с битовыми операциями. И вот неделю назад появилась потребность... Решил получше разобраться в этой теме, читал информацию пару часов... И через неделю ты выпускаешь ролик по этой теме... Совпадение? Не думаю! Контент как всегда крутой! Мне нравится, как ты преподносишь информацию! Очередной годный ролик на актуальную тему.
@АлександрБескровный-ь3т2 жыл бұрын
Ты супер! Это то чего реально не хватало на русскоязычном Ютубе.
@kor_com7763 Жыл бұрын
Отличный ролик. Проходил это в мшп и думал, что никогда не понадобится, но здесь приведены отличные примеры
@cranebird14672 жыл бұрын
Приятный голос, внятная речь, грамотная подача материала, все нравиться. Просьба если можно чуть, чуть тише фон музыки. Спасибо огромное!
@Kamal.Abdullayev2 жыл бұрын
Великолепные видео у тебя.Ставлю лайк перед просмотром.
@АндрійФранжі2 жыл бұрын
Отличное изложение материала👍
@avr_stm_pro29552 жыл бұрын
это точно
@vadimkasiuk27412 жыл бұрын
Красавчик, продолжай в том же духе! Ты делаешь правильное дело, спасибо!!!
@alexfantast65662 жыл бұрын
Огромное спасибо за этот материал! Всегда были некоторые сомнения во время использования побитовых сдвигов и операций над битами, а здесь предствалена вся необходимая информация! Низкий поклон за разбор!
@mikurrey41611 ай бұрын
Большое спасибо! Просто и наглядно, объяснить понятнее, наверное, невозможно
@ВладиславТрубников-т6ь2 жыл бұрын
Привет. Ты один из лучших!!! Спасибо тебе за создаваемое!
@d_invictus2 жыл бұрын
Лайк, так держать, отличная подача материала! В видео не был проговорён один важный момент - во многих языках программирования && и || -укороченные(еще называют операторы короткого замыкания) формы логических операторов И и ИЛИ. Отличие от побитовых(| и &) состоит в том, что второй операнд у них вычисляется лишь в случае необходимости. Т.е если левый оператор в выражении &&-ложь, то второй оператор уже не вычисляется. Что касается примера в конце, то числа в массиве numbers ограничены 8192 при размере readed в 256. Размер readed можно не указывать, да и ячейки в readed будут использованы только кратные степени двойки-1. В качестве показа магии упаковки битов в ячейки int такой велосипед конечно сгодится. А если в numbers будет 0, то можно дописать int row = index!=-1?getRow(index)+1:0; Для col аналогично.
@spbrg78-332 жыл бұрын
Очень познавательно! Такая подача материала... конечно дорогого стоит. Спасибо. P. S. Хотелось бы еще и списка рекомендуемых книг дождаться. 🙂(с грамотным погружением в алгоритмы).
@АлексейПылайкин-ц4я2 жыл бұрын
Очень крутая подача и сразу видно, что с нами общается знаток своего дела. Жду продолжения уроков на ассемблере, ведь одного урока недостаточно)
@ЛиЖеньшень2 жыл бұрын
Лучший ролик про битовые операции и их использование в СНГ ютубе.
@namesurname92012 жыл бұрын
Спасибо за твою работу! Лучший в своем деле)
@cyan_technologies11 ай бұрын
Это лучшие в наблюдаемой вселенной ролики!
@ОпопопоОаоалала2 жыл бұрын
Спасибо что живой
@ava91202 жыл бұрын
*Спасибо! Очень информативно разобрал интересный кейс, благодаря тебе я узнал много нового!*
@7fexa Жыл бұрын
Всё, что идёт после 16:05, я больше ни в одном видео или книге не встречал. Как будто глаза открылись на такие вещи
@IvannZ_Ru Жыл бұрын
спасибо большое за контент, был на собеседовании в институт задали вопрос по теме, и как раз пригодится этот ролик.😊
@sckygera2 жыл бұрын
Спасибо огромное! Alek - вы лучший!
@hexagon43262 жыл бұрын
Арифметический сдвиг числа -1 тоже ведь попадает под правило деления. Допустим мы сдвигаем -1 на один бит вправо, т.е. делим на 2, получаем -1/2. Округляем это число в меньшую сторону, получаем -1 т.к. 0 > -1
@ВячеславКиреев-в4у2 жыл бұрын
Посмотрю позже когда будет время, лайк сразу ! Знаю что контент годный 👍
@frigter11122 жыл бұрын
Прекрасное оформление видео и визуализации идеи, продолжай в том же духе)
@iliyalaz61322 жыл бұрын
Просто супер! Очень интересно! Спасибо
@alex.artechtattoo2 жыл бұрын
Великолепно изложено, а главное своевременно! Алекс, будь здоров и успешен в своих делах и начинаниях!
@НиколайТорощин-е6э2 жыл бұрын
Категорический лайк👍 подписался ещё с видео про ассемблер❤
@happyshow4411 Жыл бұрын
Спасибо за видеоролик!
@enisykin12992 жыл бұрын
отлично! дай те бог!
@mishkasensei2 жыл бұрын
Хоть ничего нового не узнал, но освежить знания было самое то. 👍👍
@castlegrafa2 жыл бұрын
Шикарно! Всё на высоте! Огромное спасибо!
@sovrinfo2 жыл бұрын
Спасибо за видео.Коммент в поддержку!
@VladykaVladykov2 жыл бұрын
Кратко и полезно!
@den45902 жыл бұрын
Огромное спасибо за такой разборчивый видео урок ,хоть он и тяжёлый для усвоения новичку ,ещё раз огромное спасибо
@CoBaldr2 жыл бұрын
В микроконтроллерах это повсеместно используется:)
@pashkiewich2 жыл бұрын
Спасибо за уникальный контент (хоть порой не сразу удаётся его воспринять)
@ДенисРябининВладимирович2 жыл бұрын
Лучший, отличная визуализация
@U-nieskladovaje2 жыл бұрын
Этим видосом ты спас меня от выгорания, спасибо.
@cs_dequeue2 жыл бұрын
Спасибо большое! Очень интересное видео! Определенно лайк👍👍👍
@sir8902 жыл бұрын
Просто невероятное обьяснение материала ! Очень и очень круто и приятно смотреть!
@loguser7795 Жыл бұрын
Полезно и интересно, с прекрасной подачей. Спасибо^^
@__Minecraft_Poseidon__2 жыл бұрын
Не глядя лайк.
@aiminvest2 жыл бұрын
Прекрасная работа!
@alexkazimir3835 Жыл бұрын
Графика и подача огонь🎉
@SalikhovDamir2 жыл бұрын
Шикарная подача. Продолжай дальше. Удачи в начинаниях. Что за мелодии в роликах?
@НиколайРюмин-й6и2 жыл бұрын
Спасибо, это было круто. С одной стороны звучит все просто, а с другой для непривыкшего к двоичной системе исчисления и к Си мозга - пар из ушей. Я думаю еще пару раз повторить с интервалом пару дней и уляжется😁. Но звучит круто, подача непринужденная.
@denruslife98452 жыл бұрын
Большое спасибо за урок!
@gor_77992 жыл бұрын
Отличный ролик!
@imbc7867ghuui92 жыл бұрын
ахах) круто, спасибо) Когда на работе сказали рефакторить код, а ты не хочешь больше этим заниматься и пушнув лиду такое, думаю он поймет что дела с тобой плохи)
Я всегда стараюсь поддерживать скилы работы с битами. Но, честно, приходится работать с ними очень редко.
@asudie_2 жыл бұрын
офигенное видео
@tsoer29762 жыл бұрын
Замечательно. Куча сэкономленного времени. Отличный материал
@404piano2 жыл бұрын
БОМБА!"!!!
@Аноним-ф3д2 жыл бұрын
Огонь 🔥
@vovapirotskiy5031 Жыл бұрын
супер круто ) еще бы веб теорию ))
@hutoryanin2 жыл бұрын
Благодарю за подробный и интересный рассказ. *Л. а. й. к.* и *Р. е. с. п. е. к. т.*
@ssiillaa01022 жыл бұрын
И так как работать с битами. Открываешь Abletone, расставляешь кики, снейры, хеты, берёшь семпл, понижаешь его на актаву вниз, 808. Готово. А вы не про эти биты, ну тогда погнал
@nakidai2 жыл бұрын
О, спс, я теперь написал кадилак 2.0
@JustSadOne6 ай бұрын
Очень круто. Но мне определённо следует пересмотреть это ещё один раз, а потом, может быть и ещё один раз.
@senkamatic84482 жыл бұрын
Благодарю 🙂
@Genorred4 ай бұрын
Уже представляю, как на собеседование на фуллстек джаваскрипт разработчика мне дают задание с вынесением в массив повторяющиеся строки наиболее оптимизированным способом, а я булиан флаги полчаса собеседования расписываю ) чёрт возьми, мне нравится
@mks37822 жыл бұрын
Спасибо!
@OlegMavlyutov2 жыл бұрын
Первая мысль, после прочтения названия, "это видео о создании музыки" 🙃
@vitaliy.artyukh2 жыл бұрын
Очень интересно, спасибо за такой подробный материал. В методе getRow округление вниз делать не нужно, т.к. вы говорили что это свойство побитового сдвига, округлять в меньшую сторону если результат не целое число.
@qweqweqweqweqweeeewq77612 жыл бұрын
Лайк, очень полезно!
@Принуждениекмиру-ь2ц2 жыл бұрын
Вы все безумней и безумней)) крутой ролик.
@csharpdev-software-engineer2 жыл бұрын
Здравствуйте Alek! пожалуйста, сделайте видео о том, как работает операционная система
@GeTRaR Жыл бұрын
Не знаю как я сюда попал, ничего не понимаю в этой теме, но посмотрел (вернее послушал на фоне) от начала и до конца😂
@T1m0the0S2 жыл бұрын
Про100 комментарий в поддержку канала. Контент пушка!
@роскомнадзор-д8я2 жыл бұрын
(я питухонист, не судите строго) 5:53 А в питоне в любом случае получится -9 (обожаю динамическую типизацию) 9:39 Кстати если инвертировать выход у XOR'а и проверить что все биты равны одному, то можно получить самодельный == (хотя зачем это, если всё равно это будет медленнее, чем встроенный ==?) 12:01 2 ** index 12:23 А... Ну в принципе оба варианта работают, что сказать 13:23 Разве? Оно же на место нового бита ставит 0, разве не так? 23:29 А вот тут было бы лучше сделать какой-нибудь класс с методами .getRow() и .getCol() 24:21 А тут разве не удобнее было бы сделать кортёж (ака конст массив) на два int'а? Видео интересное, но при оптимизации в какую-либо сторону (занимаемая память, нагруженность проца, удобочитаемость кода) страдают противоположные стороны (если это конечно не хеллоу ворлд где надпись "Hello World!" генерируется при помощи сложных махинаций с urandom, какой-нибудь CRC1024 (такой не существует официально) и где попутно майнится биткоин (т.е. типичный хеллоу ворлд на Malbolge))
@doctorbsd2 жыл бұрын
Изучение в детстве зоопарка логических микросхем (счётчики, регистры, дешифраторы) и изучение АСМа для старого доброго Спектрума позволяет воспринимать этот материал как само собой разумеющееся. И я был удивлен, когда предложил программеру работать с битами, а он не понял КАК.
@MODHIIK2 жыл бұрын
охохо. наконец-то видосик
@sicher31352 жыл бұрын
Это напомнило мне ситуацию в школе, когда в математике начали уходить цифры, и оставаться только буквы. Тут уже начали исчезать и буквы, заменяясь операторами)))
@ЯнТемняков-ю5р2 жыл бұрын
Ещё не посмотрел видео, но лайк поставил
@proletarian2 жыл бұрын
Работал с урдуино на Си, битовыми операторами дёргал порты ввода вывода