|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.07.2010, 11:48 | #1 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Битовые операции
Что такое двоичный сдвиг и вообще зачем он нужен?
|
11.07.2010, 12:56 | #2 | ||
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Цитата:
Цитата:
E-Mail: arigato.freelance@gmail.com
|
||
11.07.2010, 13:06 | #3 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
А можно поконкретнее...
|
11.07.2010, 13:09 | #4 |
Форумчанин
Регистрация: 01.09.2007
Сообщений: 747
|
Сдвиги нужны для выполнения элементарных операций. Для умножения.
Никому не верьте.
|
11.07.2010, 13:12 | #5 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
2 в двоичной системе = 10
2 >> 1 означает сдвинуть 1 бит вправо 2 >> 1 = 100 = 4 по сути сдвиг вправо это быстрое умножение на степень двойки 2 >> 1 = 2*2^1 = 4 2 >> 2 = 1000 = 2*2^2 = 8 Аналогично сдвиг влево: 2 = 10 2 << 1 сдвинуть 1 бит влево, т.е будет 1 сдвиг влево это деление на степень двойки 2 << 1 = 2/(2^1) = 1 8 << 2 = 8/(2^2) = 8/4 = 2 |
11.07.2010, 13:21 | #6 |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Например для операции с одним битом, вот пример:
Код:
Кто знает более легкий способ- пишите Блин, я забыл что упростил и убрал сдвиг >_< Ладно, можно, например, сделать гирлянду бегущие огни(используя один порт микроконтроллера) с помощью сдвига битов на каждой итерации главного цикла(ну или в прерываниях, ессно). Код:
Последний раз редактировалось Levsha100; 11.07.2010 в 13:46. |
11.07.2010, 13:33 | #7 | |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Цитата:
Или xor al, 4, если номера битов от 0 считать. E-Mail: arigato.freelance@gmail.com
|
|
11.07.2010, 13:34 | #8 |
Форумчанин
Регистрация: 23.02.2010
Сообщений: 107
|
Сдвиг редко используется в одиночку, т.к. для чисел это умножение/деление на 2/4/8/16/.. .
Совместно с AND, можно извлекать нужные биты из числа. Пример: int alpha=1111001011111111; int beta = alpha>>9 & 1111b; В результате, beta=1001b. А используя OR, компоновать числа. int a=11001100b; int b=01101011b; int c=a<<8 | b; //с=1100110001101011; Последний раз редактировалось Indian; 11.07.2010 в 16:28. |
11.07.2010, 13:38 | #9 | ||
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
Код:
Цитата:
Последний раз редактировалось _-Re@l-_; 11.07.2010 в 13:41. |
||
11.07.2010, 13:52 | #10 |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Вспомнил как это писалось, дело в том что изначально я не мог найти команду xor в даташите, начал ваять и уже когда была построена махина я ВНЕЗАПНО обнаружил что в место xor там команда eor =)
Код:
Последний раз редактировалось Levsha100; 11.07.2010 в 14:05. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Битовые операции(С) | Александр Елис | Помощь студентам | 11 | 16.02.2010 21:11 |
Битовые операции | ("")(Э_Є)("") | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 04.07.2009 13:19 |
Битовые операции | ("")(Э_Є)("") | Общие вопросы C/C++ | 4 | 03.07.2009 19:15 |
Битовые операции | DrAlexx2121 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 14.06.2008 22:26 |
Битовые операции | LEX.darnica | Помощь студентам | 14 | 23.12.2007 19:40 |