Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/91: Рейтинг темы: голосов - 91, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 11

Побитовый сдвиг

29.12.2009, 06:20. Показов 17626. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть допустим переменная

unsigned char data = 0b10111011;

Как можно сделать за 4 шага по битовый сдвиг на двух половинах

как видите она делится на 1011 1011 надо что бы сдвигалась левая и правая часть .


1 . 0101 0101

2. 0010 0010

3. 0001 0001

4. 0000 0000

вот так примерно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2009, 06:20
Ответы с готовыми решениями:

Побитовый сдвиг
#include <iostream> using namespace std; int main(int argc, char** argv) { int a,b,c,i; cin >>a; cin >>c; cin >>b; do...

Побитовый сдвиг
Выполнение данного кода приравнивает asd к нулю. Хотя должно к единице, судя по моим вычислениям. char asd = 10 & 2 >> 1; ...

Побитовый сдвиг
Добрый день, помогите пожалуйста с побитовым сдвигом вправо, не получается добиться верной работы, укажите на ошибку пожалуйста, спасибо! ...

11
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
29.12.2009, 06:32
не совсем понятно: вам за 4 операции надо сдвинуть в право каждую половину переменной на один бит?
0
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 11
29.12.2009, 06:52  [ТС]
Да,верно

Добавлено через 14 минут
В обще можно хотя бы толковую ссылку по битовым операциям в 2ичной системе
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
29.12.2009, 06:55
C++
1
2
data=data>>1;
data=data&(0xF7);
вот в этой книжке много чего полезного, но каюсь, сам тока глянул, не читал осознанно: Алгоритмические трюки для программистов Генри Уоррен, мл. Издательский дом "Вильяме" Москва * Санкт-Петербург * Киев 2004
1
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
29.12.2009, 07:17
Цитата Сообщение от TanT Посмотреть сообщение
data=data&(0xF7)
а не 0х77 ?
я не в курсе, операция >> какой сдвиг выполняет?
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
29.12.2009, 07:38
Цитата Сообщение от DrMcSheen Посмотреть сообщение
а не 0х77 ?
я не в курсе, операция >> какой сдвиг выполняет?
data&0xF7 - оставляет 4х левых бита без изменения, обнуляет первый с лева бит во второй (правой) половине и оставляет остальные биты этой половины без изменения.
если учесть что после сдвига на один бит влево самый левый бит равен 0, то можно и 0x77, но 0xF7 подчёкивает изменение только одного нужного бита.

>> - выполняет сдвиг вправо
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
29.12.2009, 07:44
Странно. Выполняется операция SAR. По идее, при входном значении с установленным старшим битом, после сдвига старший бит должен остаться установленным.
Т.е. при data = 1000 1000 в результате >> должно получиться 1100 0100.
Но почему-то он обнуляется.
Но всё равно, для надёжности, я бы рекомендовал использовать 0x77.
источник
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
29.12.2009, 07:50
у нас беззнаковый тип.
для надёжности можно, хотя в данном случае не играет
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
29.12.2009, 07:56
Цитата Сообщение от TanT Посмотреть сообщение
у нас беззнаковый тип
да, не учёл
0
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 11
29.12.2009, 13:56  [ТС]
Чё то не могу понять как оно сдвигает


C
1
2
3
4
5
6
7
8
9
10
11
void main(void)
{
    unsigned char data = 11000011;
             int i;
    for(i = 0;i<4;i++)
    {
        printf("%d \n",(int)data);
        data=data>>1;
        data=data&(0xF7);
    }
}
Результат:

203
101
50
17

data&(0xF7); - и это операция вроде как я поня по битового сравнения , только вот зачем она присваивается дате. И если мне память не изменяет она означает если 00100000b 00100000b то вернет тру то есть если 1 стоит в 5 позиции.
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
29.12.2009, 14:11
Цитата Сообщение от MSDev Посмотреть сообщение

data&(0xF7); - и это операция вроде как я поня по битового сравнения , только вот зачем она присваивается дате. И если мне память не изменяет она означает если 00100000b 00100000b то вернет тру то есть если 1 стоит в 5 позиции.
ты несколько спутал с &&, A&&B - вернёт тру, если выражения A и B тру.
& - логическое И, таблица истинности такова
1&1 = 1
1&0 = 0
0&1 = 0
0&0 = 0

data&(0xF7) - обнуляет 4ый справа бит
0
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 11
29.12.2009, 17:49  [ТС]
То есть эта операция делает

допустим data = 00111011

data&(0xF7)

вернет 00110011

Добавлено через 2 часа 35 минут
PORTA=PORTA>>1; - вот это простой сдвиг на 1 вправо верно ...

0001 0000
0000 1000
0000 0100
...

data&(0xF7) - а это в обще никак не могу понять...покажите пару итерация если не трудно и опишите подробнее...

Добавлено через 15 минут
все разобрался.Всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2009, 17:49
Помогаю со студенческими работами здесь

Побитовый сдвиг
Непонятна часть программы с 24 по 45 строку. Помогите разобраться, пожалуйста. #include &lt;iostream&gt; using namespace std; ...

Побитовый сдвиг
Столкнулся с проблемой. У меня есть ключ - 0x1A305B98 Из него я получаю параметр путем int parm = (0x1A305B98 &gt;&gt; 20) &amp;...

Побитовый сдвиг массива
Есть двумерный массив int massiv;Нужно сдвинуть первый элемент массива в конец, а все остальные соответственно вперед. В цикле это...

Побитовый сдвиг влево и вправо
Что выполнится быстрее - сдвиг влево или сдвиг вправо? И как замерить время выполнения каждой из операций в коде? Добавлено через 2...

Как происходит побитовый сдвиг?
for(int i = 0; i &lt; 10; i ++){ if (i &amp; (1 &lt;&lt; j)) cout &lt;&lt; i &lt;&lt; endl; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru