Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871

Поразрядные операции - в чем суть и применение?

18.10.2013, 22:18. Показов 3022. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Объясните, в каких задачах они могут понадобиться и как ими пользоваться. А конкретно &, |, ^, сдвиги и т.д.
*в интернете искал, но мне нужно объяснение знающего человека, у которого если что я могу до спросить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2013, 22:18
Ответы с готовыми решениями:

Поразрядные операции - в чем суть и применение?
Давно откладывал эту тему, но все же столкнулся с ней снова. Так вот, не могу понять зачем они, где и как их использовать?

Поразрядные операторы - их суть и назначение
Господа, подскажите пожалуйста, что делают поразрядные операторы, если можно, то пожалуйста на пальцах, ибо дошел по шилдту до этого и...

поразрядные операции
помогите пожалуйста решить следущую задачу: даны два int-числа: N1 = АBCD и N2 = EFGH, где AB…GH – 16-ричные цифры, ПОп –...

14
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
18.10.2013, 22:25
Поразрядные операции - в чем суть и применение?
наша песня хороша начинай сначала? кто не учится на своих ошибках вопросах и наступает на теже грабли и задает их снова?
0
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 22:30  [ТС]
Jupiter, вопрос остался открытым
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
18.10.2013, 22:41
Ryuk, ну так и подымай ту тему. От того что ты задаешь такие вопросы яснее не станет.
В основном & используется для того что бы узнать значение бита или группы бит, | - для того чтобы установить значение бита или группы бит. Сдвиги используют как умножение на два в степени
x << y = x * 2^y
или деление
x >> y = x / 2^y
так же используют для болучения байта(группы байт) из числа (например из одного uitn32_t сделать два uint16_t),
и наоборот для группировки байт(группы байт) в число (например из 4-х байт сделать один int).
И не надо спрашивать для чего это может понадобится.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
18.10.2013, 22:53
Ryuk,
по моему у тебя проблемы с двоичкой, ты думаешь что это какая то экзотика
Но внутри машины все данные лежат в двоичном коде, а на экран выводятся уже в виде буковок, рисунков, чисел
вот например как можно( для латинского алфавита)
сделать маленькие буквы из больших
C++
1
ch=ch|0x20;
большие из маленьких
C++
1
ch=ch&~0x20;
или поменять большие на маленькие и наоборот
C++
1
ch=ch^0x20;
Выглядит как шаманство, но если откроешь таблицу ASCII кодов то увидишь что отличаются они одним 6 битом(0x20)
http://ru.wikipedia.org/wiki/ASCII
1
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 22:57  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
И не надо спрашивать для чего это может понадобится.
Поставим вопрос по другому, зачем поразрядные операторы, если я могу сравнивать десятичные числа с помощью логических операторов?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
18.10.2013, 23:01
Цитата Сообщение от Ryuk Посмотреть сообщение
зачем поразрядные операторы, если я могу сравнивать десятичные числа с помощью логических операторов?
нет у машины десятичных чисел

если считаешь что они тебе не нужны, то не учи
если тебе достаточно такого уровня абстракции, то пожалуйста
только забудь про эффективный код
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
18.10.2013, 23:04
Цитата Сообщение от Ryuk Посмотреть сообщение
Поставим вопрос по другому, зачем поразрядные операторы, если я могу сравнивать десятичные числа с помощью логических операторов?
ну сравни, а поменять значение с помощью логических операторов тоже сможешь?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
18.10.2013, 23:08
да вспомнил
есть такое понятие как флаги, очень часто используют в аргументах функций
C++
1
flag1|flag2
как ты это напишешь арифметически?
0
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 23:25  [ТС]
ValeryS, до этого, был хороший пример, только не понял как из ASCII достать шестнадцатеричные числа.
Грубо говоря, с помощью поразрядных операций мы можем проделать нашу программу в еще более мелких деталях?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
18.10.2013, 23:31
Цитата Сообщение от Ryuk Посмотреть сообщение
ValeryS, до этого, был хороший пример, только не понял как из ASCII достать шестнадцатеричные числа.
элементарно
C++
1
2
for(char ch='A';ch<='Z';ch++)
   printf("%c %d %x \n",ch,ch,ch);
выведет на экран символы от A до Z
их символьное десятичное и шеснадцетеричное значение
1
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
18.10.2013, 23:48
Цитата Сообщение от Ryuk Посмотреть сообщение
Добрый вечер. Объясните, в каких задачах они могут понадобиться и как ими пользоваться. А конкретно &, |, ^, сдвиги и т.д.
Поразрядные операции очень часто нужны, для анализа числа в рамках рассмотрения его в двоичном коде. Например, часто при работе с оборудованием, возникает необходимость считать байт с какого нибудь порта, а потом посмотреть скажем 5-ый бит этого числа. если он скажем равен 1, то это означает, что контроллер готов к дальнейшим действиям). для того чтобы это сделать помогает операция &:
C++
1
2
3
... a = 01011100 (в  двоичном представлении); ....
/*найдем значение 5 бита*/
if (a & 32 /*10000*/ = 1) {....}
Есть еще масса применений...

Добавлено через 2 минуты
То есть мы умножаем нашь байт XXXXXXXX на 00010000 и на выходе получим от умножения 000X0000, таким образом узнаем X.

Добавлено через 7 минут
Язык Си - низкоуровневый (из высокоуровневых) язык. Использование, указателей, а как следствие прямой доступ к адресному пространству, позволяет видеть картину в "единицах и нулях". Очень детально. А чтобы интерпретировать многие данные, приходится применять вот такую, поразрядную, логику, о которой вы задали вопрос...

Добавлено через 2 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
наша песня хороша начинай сначала? кто не учится на своих ошибках вопросах и наступает на теже грабли и задает их снова?
на самом деле поразрядная логика всегда много вопросов вызывает типа "а нафига это вообще нада!!!". всё потому, что Си не учат люди, а учат С++ сразу, а то и C# или Java.

Добавлено через 4 минуты
Цитата Сообщение от Ryuk Посмотреть сообщение
в каких задачах они могут понадобиться
Да в любых, но главное запомнить то, что где они появляются и применяются, там надо взглянуть на число с точки зрения компа, расписать его в двоичной системе счисления. и тогда многое встает на свои места...=)
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
19.10.2013, 00:09
Цитата Сообщение от ildwine Посмотреть сообщение
if (a & 32 /*10000*/ = 1)
даже если это описка = вместо == то все равно не сработает
32 никогда не равно 1
или так
C++
1
if (a & 32 /*10000*/ ==32)
или так
C++
1
if (a & 32 /*10000*/ )
здесь мы закладываемся на то что очистили все биты(=0), кроме пятого, то если 5 бит равен 0 то все число равно 0 т.е ЛОЖЬ
а если равен 1 то число равно 32, не 0 т.е ИСТИНА
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
19.10.2013, 00:20
Цитата Сообщение от ValeryS Посмотреть сообщение
даже если это описка = вместо == то все равно не сработает
32 никогда не равно 1
согласен

Добавлено через 2 минуты
C++
1
2
3
... a = 01011100 (в  двоичном представлении); ....
/*найдем значение 5 бита*/
if (a & 32 /*10000*/ ==32) {....}
Добавлено через 34 секунды
ну стремный пример, конечно, но что то на ум ничего лучше не идет. пятница.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
19.10.2013, 09:55
Ryuk,
вот тебе функция которая печатает двоичное представление числа
C++
1
2
3
4
5
6
void DecToBin(unsigned int n)
{
 for(int i=sizeof(unsigned int)*8-1;i>=0;i--)
     printf("%c",n&(1<<i)?'1':'0');
 printf("\n");
}
выделяет каждый бит начиная со старшего и печатает его
можно было бы и сделать без поразрядных операций но не так красиво получится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2013, 09:55
Помогаю со студенческими работами здесь

Поразрядные операции
Здравствуйте. Объясните, пожалуйста, есть задача: выполнить поразрядное «или» 0-5 разрядов В и 0-3 разрядов С, сдвинутых вправо на 2...

Поразрядные операции
Есть 16-е число, например N=0xC5D612F7, помогите убрать единицу в старшем бите у C и F, используя поразрядные операции на языке Си. Я даже...

Поразрядные операции
Необходимо записать три бинарных нуля перед двоичным представлением числа , и записать в байтовый массив . Помогите реализовать это задание

Поразрядные операции
Даны два int-числа: N1 = ABCD и N2 = EFGH, где AB…GH – 16 – ричные цифры. Образовать long-число DEGHDABF, используя только поразрядные...

поразрядные операции
Здравствуйте, только начал знакомство с C++, но необходима помощь в написании кода, хотя бы кратко объясните, спасибо. Условие: ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru