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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Bitoperation... как? 
:(
    Опции темы
Entwickler
Дата 4.6.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет.
Я наверно не оригинален, но... есть проблемка. Нужно узнать например "включён" ли 5 Bit в int var; или нет... если да, то во втором int "выключить" 2 Bit...  если не трудно пример, ну а если трудно то просто как такое делается в теории... заранее очень благодарен ; - )))
PM MAIL   Вверх
Fazil6
Дата 4.6.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 7
Всего: 60



Код

if( var & 0x10 )
{
   var |= 4;
}


Это сообщение отредактировал(а) Fazil6 - 4.6.2008, 11:48
PM MAIL   Вверх
mes
Дата 4.6.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(Entwickler @  4.6.2008,  11:04 Найти цитируемый пост)
Я наверно не оригинален, но... есть проблемка

да уж.. в поисе валом ответов.. 

Цитата(Entwickler @  4.6.2008,  11:04 Найти цитируемый пост)
Нужно узнать например "включён" ли 5 Bit в int var; или нет... если да, то во втором int "выключить" 2 Bit...  

a учитывается ли что 1й порядковый - это нулевой?

Код

const size_t bit_0 = 1;      // 00000001
const size_t bit_1 = 2;      // 00000010
const size_t bit_2 = 4;      // 00000100
const size_t bit_3 = 8;      // 00001000
const size_t bit_4 =16;     // 00010000
const size_t bit_5 = 32;    // 00100000
const size_t bit_6 =64;     // 01000000
const size_t bit_7 =128;   // 10000000

int i1 =262;  // 
int i2 =240;   //  
int i3 =547;   //  
int i4 =354;  //  для примера
if  ( ( i1 & bit_5 )== bit_5 )  {                             // если 5 й бит включен
                                                   i2 |= bit_2;       //  установить 2й бит  
                                                   i2 |= ~bit_2;      //  установить все кроме  2го бита
                                                   i3 &= bit_1;     // сохранить только 1й бит 
                                                   i3 &= ~bit_1;    // стереть 1й бит 
                                                   i4 ^=bit_7;       //  инвертировать 7й бит
                                                   i4 ^=~bit_7;     //  инвертировать все кроме 7го бита
                                                };


Добавлено @ 11:27
Цитата(Fazil6 @  4.6.2008,  11:24 Найти цитируемый пост)
  var &= 0xFFFB;

тут стираются все кроме третьего ))

Добавлено через 10 минут и 51 секунду
Цитата(Fazil6 @  4.6.2008,  11:24 Найти цитируемый пост)
 var |= 0xFFFB;

а тут устанавливаются все кроме третьего ))

Это сообщение отредактировал(а) mes - 4.6.2008, 11:32


--------------------
PM MAIL WWW   Вверх
Entwickler
Дата 4.6.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Огромное ПАСИБО!!!
PM MAIL   Вверх
Fazil6
Дата 4.6.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 7
Всего: 60



Цитата(mes @  4.6.2008,  11:25 Найти цитируемый пост)
а тут устанавливаются все кроме третьего ))

ну да... накосячил немного
PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(Entwickler @  4.6.2008,  11:04 Найти цитируемый пост)
Нужно узнать например "включён" ли 5 Bit в int var; или нет... если да, то во втором int "выключить" 2 Bit...  

Код

// result - второй int

result &= ~((var & 0x20) >> 3)


Это сообщение отредактировал(а) MAKCim - 4.6.2008, 11:53


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 4.6.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(MAKCim @  4.6.2008,  11:52 Найти цитируемый пост)
result &= ~((var & 0x20) >> 3)

выражение супер ! краткое и точное ..  но к сожалению,  для автора темы имхо далеко не очень подходящий пример для понимания..



--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 4.6.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(mes @  4.6.2008,  12:34 Найти цитируемый пост)
выражение супер ! краткое и точное ..  но к сожалению,  для автора темы имхо далеко не очень подходящий пример для понимания..

достаточно его расписать на конкретных примерах result и var


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 4.6.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(MAKCim @  4.6.2008,  12:38 Найти цитируемый пост)
достаточно его расписать на конкретных примерах result и var 

ну в принципе да.. тогда только остается добавить уточнение , чтоб при изучении не зашел в тупик:
подобное выражение - это оптимизированный пример под "однобитовые" операции
т.е например в случае сравнения с маской (группой битов)  такое решение не подойдет 



--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 4.6.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(mes @  4.6.2008,  13:05 Найти цитируемый пост)
т.е например в случае сравнения с маской (группой битов)  такое решение не подойдет 

Код

result &= ~(((var & mask) == mask) << 2)



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 4.6.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



MAKCim, +1

Это сообщение отредактировал(а) mes - 4.6.2008, 14:15


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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