Манипуляция 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-регистром. Я хочу написать функцию для управления пинами по одиночки.
Всё гениальное просто:
Всем спасибо.
Можно воспользоваться функцией bitWrite()
Или так
А всётаки, что было в моей логике не так?
2 maksim
Довольно интересная ссылка к bitWrite() "file///C:/Users/..."
Да, исправил: bitWrite()