Подскажите, как изменить бит в байте на С++?
Суть в том, что надо менять только один бит, без каких либо промежуточных логических операций (т. е. не затрагивать остальные биты байта)
#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;
}
unsigned char b;
//установить:
b |=3 /*здесь число для маски, пример: 4 - установит 3й бит в единицу (считая от единицы) */;
//сбросить:
b &=!3/*здесь число для маски, пример: 4 -сбросит 3й бит в единицу (считая от единицы) */;
Пусть исходный байт такой
-----------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
Битовыми операциями: & | ^ ~
Чё ? Имеется ввиду в типе "byte" ?