
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.80.4.147] |
![]() |
|
Сообщ.
#1
,
|
|
|
Подскажите как мне получить значение бита в байте...и как установить определённый бит в байте в определённое значение (1 | 0 ) ?
|
Сообщ.
#2
,
|
|
|
Есть байт. Выбираем нужное место в нем, для примера, второй бит.
Чтобы установить его, делаем так: byte |= 0x04 (это 00000100b) Чтобы сбросить: byte &= 0xFB (это 11111011b) Чтобы узнать, установлен ли бит: if (byte & 0x04) бит_установлен; else бит_не_установлен. Можно это все сделать автоматически сдвигами. Если надо - обращайся. |
Сообщ.
#3
,
|
|
|
Наверно, так
![]() ![]() ![]() <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> Ты это имел ввиду? |
Сообщ.
#4
,
|
|
|
Ответ содержиться в самом вопросе (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 |
Сообщ.
#5
,
|
|
|
Блин, пока писал свой ответ, двое папиков уже ответили...
![]() |
Сообщ.
#6
,
|
|
|
Всем огромаднейшее ШПАСИБО !
|