Манипуляция Bit's в Integer
- Войдите на сайт для отправки комментариев
Вс, 07/10/2012 - 02:24
Здрасти всем.
Пытаюсь написать функцию которая изменяет конкретный Bit в Integer, тоесть:
У меня есть переменная uint8_t writeValue = 3; бинерно это writeValue = 00000011; мне нужно изменить конкреный Bit либо на 1 либо на 0, не меняя остальные.
К примеру я хочу изменить 8-Bit на 1, а первый на 0, чтобы у меня получилось writeValue = 10000010 т.е. writeValue =130.
Накорябал какуюто смешную функцию, но она не делает того чего мне надо.
void write(uint8_t pin, bool state){
uint8_t tempValue = 0; // Переменная в каторую сохраняется изменённое число
i = outPinsCount; // Колличество Bit's
do{
if(pin == (i-1)){ // Если актуальный Bit должен быть изменён
if(state){ // Бит меняем на 1
tempValue += pow(2,(i-1));
}// Иначе меняем на 0
}else{
tempValue += (writeValue & (1 << (i-1))); // Сохраняем старые Bit's
}
i--;
}while(i>0);
this->writeValue = tempValue; // Переписываем старое число на новое.
}
writeValue это переменная каторая отправляется в shiftOut для управления 595-регистром. Я хочу написать функцию для управления пинами по одиночки.
Всё гениальное просто:
if(state){ (this->writeValue) = (this->writeValue) | (1 << pin); }else{ (this->writeValue) = (this->writeValue) & ~(1 << pin); }Всем спасибо.
Можно воспользоваться функцией bitWrite()
Или так
if(state){ writeValue |= (1 << pin); }else{ writeValue) &= ~(1 << pin); }А всётаки, что было в моей логике не так?
2 maksim
Довольно интересная ссылка к bitWrite() "file///C:/Users/..."
Да, исправил: bitWrite()