Юрий-17
Гений
(76488)
12 лет назад
#include <bitset>
#include <iostream>
using namespace std;
unsigned char pow(unsigned char z)
{ unsigned char i=z;
for(z=1;i;i--) z*=2;
return z;
}
unsigned char changebit(unsigned char b,unsigned char p)
{
unsigned char t=b/pow(p);
return b+(1-(t-t/2*2)*2)*pow(p);
}
int main()
{
unsigned char b,p;
for(b=0;b-0xFF;b++,cout << endl)
for(p=0;p-8;p++) cout << unsigned(p) << ": " << bitset<8>(b) << " => " << bitset<8>(changebit(b,p)) << endl;
for(p=0;p-8;p++) cout << unsigned(p) << ": " << bitset<8>(b) << " => " << bitset<8>(changebit(b,p)) << endl;
return 0;
}
Noctus
Мастер
(1447)
12 лет назад
Пусть исходный байт такой
-----------7 6 5 4 3 2 1 0
Byte t = 1 0 0 1 0 1 1 1
И тебе требуется установить 3 бит (0 -> 1, 1 -> 1)
Делается это с помощью логической операции ИЛИ (&)
Делаешь (t & 2^3)
А для того, чтобы сбросить байт в ноль (0 -> 0, 1 -> 0)
Можно сначала установить его, потом выполнить XOR
(t & 2^3) XOR 2^3, этот способ можно упростить, но мне лень xD
Денис Евдоченко
Мыслитель
(8379)
12 лет назад
unsigned char b;
//установить:
b |=3 /*здесь число для маски, пример: 4 - установит 3й бит в единицу (считая от единицы) */;
//сбросить:
b &=!3/*здесь число для маски, пример: 4 -сбросит 3й бит в единицу (считая от единицы) */;