Arduino:Справочник языка Arduino/Побитовые операторы/Операторы побитового сдвига влево и вправо
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Операторы побитового сдвига влево (<<) и вправо (>>)[1]
В языке C++ имеется два оператора для побитового сдвига: «<<» (для сдвига влево) и «>>» (для сдвига вправо). Эти операторы заставляют биты из левого операнда сдвинуться влево или вправо на количество позиций, указанных в правом операнде.
Более подробно о побитовых расчетах можно прочесть тут.
Синтаксис
переменная << количество_битов
переменная >> количество_битов
Параметры
переменная (байт, целое, длинное целое), количество_битов (целое <= 32)
Пример
int a = 5; // в бинарном виде: 0000000000000101
int b = a << 3; // в бинарном виде: 0000000000101000, или 40 в десятичном
int c = b >> 3; // в бинарном виде: 0000000000000101, т.е. возврат к 5, с чего мы и начинали
Когда вы смещаете значение X на Y битов влево (X<<Y), то левые биты этого значения теряются, а точнее — вовсе перестают существовать.
int a = 5; // в бинарном виде: 0000000000000101
int b = a << 14; // в бинарном виде: 0100000000000000 – первая единица в «101», по сути, просто исчезает
В общем, работая с этими операторами, имеет смысл внимательней следить за тем, не исчезают ли нужные биты в небытие.
Кроме того, об этом операторе проще всего думать как об инструменте для возведения во вторую степень. Другими словами, смещение битов влево позволяет возводить исходное значение (в десятичном выражении) в степень двух.
Например, можно задействовать такие выражения:
1 << 0 == 1
1 << 1 == 2
1 << 2 == 4
1 << 3 == 8
...
1 << 8 == 256
1 << 9 == 512
1 << 10 == 1024
...
Когда вы смещаете значение X на Y битов вправо (X>>Y), и самым первым битом является «1», то результат зависит от того, какому типу данных соответствует значение X. Если X – это целое число, то первый бит будет знаковым битом, который будет определять, будет ли X значением с отрицательным числом или нет. В этом случае знаковый бит (по никому не ведомым причинам, корни которых затерялись где-то в далеком программистском прошлом) копируется в оставшиеся биты:
int x = -16; // в бинарном виде: 1111111111110000
int y = x >> 3; // в бинарном виде: 1111111111111110
Эта особенность, именуемая «знаковым расширением», зачастую бывает вовсе не нужна — например, в случаях, когда вы хотите, чтобы слева появлялись не нули, а единицы. Тут необходимо воспользоваться приведением типов данных и с его помощью сделать X беззнаковым целым числом, поскольку на него это знаковое расширение не действует. В результате слева будут появляться биты, скопированные справа:
int x = -16; // в бинарном виде: 1111111111110000
int y = (unsigned int)x >> 3; // в бинарном виде: 0001111111111110
Если вам удалось избежать исчезновения нужных битов, то имейте в виду, что оператор «>>» можно использовать еще и как средство для низведения во вторую степень:
int x = 1000;
int y = x >> 3; // делим целое число на 8, тем самым получая y = 125
См.также
Ссылки на полезные ресурсы
- AliExpress — глобальная виртуальная (в Интернете) торговая площадка, предоставляющая возможность покупать товары производителей из КНР;
- computeruniverse.net - Интернет-магазин компьютеров(Промо код 5 Евро на первую покупку:FWWC3ZKQ);
- DigitalOcean - американский провайдер облачных инфраструктур, с главным офисом в Нью-Йорке и с центрами обработки данных по всему миру;
- Викиум - Онлайн-тренажер для мозга
- Like Центр - Центр поддержки и развития предпринимательства.
- Gamersbay - лучший магазин по бустингу для World of Warcraft.
- Ноотропы OmniMind N°1 - Усиливает мозговую активность. Повышает мотивацию. Улучшает память.
- Санкт-Петербургская школа телевидения - это федеральная сеть образовательных центров, которая имеет филиалы в 37 городах России.
- Lingualeo.com — интерактивный онлайн-сервис для изучения и практики английского языка в увлекательной игровой форме.
- Junyschool (Джунискул) – международная школа программирования и дизайна для детей и подростков от 5 до 17 лет, где ученики осваивают компьютерную грамотность, развивают алгоритмическое и креативное мышление, изучают основы программирования и компьютерной графики, создают собственные проекты: игры, сайты, программы, приложения, анимации, 3D-модели, монтируют видео.
- Умназия - Интерактивные онлайн-курсы и тренажеры для развития мышления детей 6-13 лет
- SkillBox - это один из лидеров российского рынка онлайн-образования. Среди партнеров Skillbox ведущий разработчик сервисного дизайна AIC, медиа-компания Yoola, первое и самое крупное русскоязычное аналитическое агентство Tagline, онлайн-школа дизайна и иллюстрации Bang! Bang! Education, оператор PR-рынка PACO, студия рисования Draw&Go, агентство performance-маркетинга Ingate, scrum-студия Sibirix, имидж-лаборатория Персона.
- «Нетология» — это университет по подготовке и дополнительному обучению специалистов в области интернет-маркетинга, управления проектами и продуктами, дизайна, Data Science и разработки. В рамках Нетологии студенты получают ценные теоретические знания от лучших экспертов Рунета, выполняют практические задания на отработку полученных навыков, общаются с экспертами и единомышленниками. Познакомиться со всеми продуктами подробнее можно на сайте https://netology.ru, линейка курсов и профессий постоянно обновляется.
- StudyBay Brazil – это онлайн биржа для португалоговорящих студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
- Автор24 — самая большая в России площадка по написанию учебных работ: контрольные и курсовые работы, дипломы, рефераты, решение задач, отчеты по практике, а так же любой другой вид работы. Сервис сотрудничает с более 70 000 авторов. Более 1 000 000 работ уже выполнено.
- StudyBay – это онлайн биржа для англоязычных студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
Внешние ссылки