Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Условие с битовыми операциями 
:(
    Опции темы
supercelt
Дата 20.9.2015, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Добрый вечер. Код СИ
Код

unsigned char header = 9;
if(header == 9){data = 1;}

Этот код работает

Код

unsigned char header = 9;
if((header & 0x1)&(header & 0x8)){data = 1;}

Этот код не работает

попробовал сделать так:

Код

unsigned char header = 9;
if((header & (1 << 0))&(header & (1 << 3))){data = 1;}


Тоже не работает. Почему? ((
PM   Вверх
feodorv
Дата 21.9.2015, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(supercelt @  20.9.2015,  20:28 Найти цитируемый пост)
Почему?

Потому что логическая операция .AND. в C/C++ записывается как &&:
Цитата(supercelt @  20.9.2015,  20:28 Найти цитируемый пост)
if((header & 0x1)&&(header & 0x8)){data = 1;}
& - это побитовый .AND.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
supercelt
Дата 21.9.2015, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Спасибо. Тогда такой вопрос, что будет работать быстрее, условие с проверкой на равенство или условие с битными операциями?
PM   Вверх
feodorv
Дата 21.9.2015, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(supercelt @  21.9.2015,  08:40 Найти цитируемый пост)
Спасибо. Тогда такой вопрос, что будет работать быстрее, условие с проверкой на равенство или условие с битными операциями? 

Даже не знаю. Компиляторы все настолько оптимизируют, а процессоры занимаются предвыборкой команд и предсказанием переходов, что вряд ли вопрос имеет смысл. Если Вы разрабатываете программу для какой-то особой архитектуры, то тогда надо смотреть эту особую архитектуру, что там с ней.

Это сообщение отредактировал(а) feodorv - 21.9.2015, 09:30


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 21.9.2015, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

if(header == 9)

будет работать быстрее чем
Код

if((header & 0x1)&&(header & 0x8))

Но это разные вещи.
Второе условие будет истинно и при header = 13, 15 и т. д.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.