На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Как вернуть и задать значение бита в байте
    Подскажите как мне получить значение бита в байте...и как установить определённый бит в байте в определённое значение (1 | 0 ) ?
      Есть байт. Выбираем нужное место в нем, для примера, второй бит.
      Чтобы установить его, делаем так: byte |= 0x04 (это 00000100b)
      Чтобы сбросить: byte &= 0xFB (это 11111011b)
      Чтобы узнать, установлен ли бит:  
      if (byte & 0x04) бит_установлен; else бит_не_установлен.

      Можно это все сделать автоматически сдвигами. Если надо - обращайся.
        Наверно, так :)

        ExpandedWrap disabled
          <br>BOOL BitSetted (long n, char i) // (n - число, i - бит начиная с нуля)<br>{<br>     return (n >> i) & 1;<br>}<br><br>long SetBitToOne (long n, char i)<br>{<br>     return n | (1 << i);<br>}<br><br>long SetBitToZero (long n, char i)<br>{<br>     return n & ~(1 << i);<br>}<br>


        Ты это имел ввиду?
          Ответ содержиться в самом вопросе (0|1) ;)

          void SetBit(DWORD& dw, int nBitNumber, int nBitValue)
          {
               //dw - целое, в котором задаем бит
               //nBitNumber - номер бита, который задаем (0..31)
               DWORD dwMask = 1 << nBitNumber;// 0000100000....
               
               //nBitValue (0|1)
               if(nBitValue == 0)
               {//задаем 0
                     dwMask = ~dwMask;// 1111011111....
                     dw = dw & dwMask; // 0 & x = 0
               }
               else
               {//задаем 1
                     dw = dw | dwMask;// 1 | x = 1
               }
          }

          int GetBit(DWORD dw, int nBitNumber)
          {
               //dw - целое в котором узнаем бит
               //nBitNumber - номер бита, который узнаем (0..31)
               DWORD dwMask = 1 << nBitNumber;// 0000100000....
               dw = dwMask & dw;
               if(dw)
                     return 1;
               return 0;
          }

          Использование:

               DWORD dw = 1;
               GetBit(dw, 1);// == 0
               SetBit(dw, 0, 0);// dw == 0
               SetBit(dw, 1, 1);//dw == 2
               GetBit(dw, 1);// == 1
            Блин, пока писал свой ответ, двое папиков уже ответили... :)
              Всем огромаднейшее ШПАСИБО !
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0209 ]   [ 16 queries used ]   [ Generated: 5.12.23, 18:15 GMT ]