Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Bartleby Профи (784), закрыт 12 лет назад
Дополнен 12 лет назад
Суть в том, что надо менять только один бит, без каких либо промежуточных логических операций (т. е. не затрагивать остальные биты байта)
Лучший ответ
Юрий-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;
}
Остальные ответы
Avalon™ Гуру (2525) 12 лет назад
Чё ? Имеется ввиду в типе "byte" ?
Krab BarkИскусственный Интеллект (191708) 12 лет назад
Нет в C++ типа byte...
NoctusМастер (1447) 12 лет назад
Да нету, а это печалька :)
Можно использовать
bool byte_var[8] {0,0,0,0,0,0,0,0}; =)
Лайт Ягами Искусственный Интеллект (336641) 12 лет назад
Битовыми операциями: & | ^ ~
BartlebyПрофи (784) 12 лет назад
не подойдет к сожалению...
Лайт Ягами Искусственный Интеллект (336641) Почему?
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й бит в единицу (считая от единицы) */;
Похожие вопросы