Другие языки программирования и технологии

Подскажите, как изменить бит в байте на С++?

Макс Макс
Макс Макс
784
#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;
}
Алексей Воронин
Алексей Воронин
76 473
Лучший ответ
Битовыми операциями: & | ^ ~
aniskevichleg
aniskevichleg
95 282
Макс Макс не подойдет к сожалению...
unsigned char b;
//установить:
b |=3 /*здесь число для маски, пример: 4 - установит 3й бит в единицу (считая от единицы) */;
//сбросить:
b &=!3/*здесь число для маски, пример: 4 -сбросит 3й бит в единицу (считая от единицы) */;
Чё ? Имеется ввиду в типе "byte" ?
MK
Merab Koberidze
2 525
Азамат Онгарбаев Нет в C++ типа byte...
Aleksandr Sk Да нету, а это печалька :)
Можно использовать
bool byte_var[8] {0,0,0,0,0,0,0,0}; =)
Пусть исходный байт такой
-----------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