задача на побитовый сдвиг
Получаю данные в буфер, если ячейка больше 100 это "1" если меньше 100 это "0". Первые 3 бита это данные присутствия датчика. Т.е. складываю данные с 4 по 11 ячейки буфера, формируя 1 байт и т.д. Должно получиться в 0b00011111 а получается 0b00111110.
Вот пример:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
uint8_t a;
uint8_t Data_array_negative[43]={238,95,141,78,78,78,125,125,125,125,125,78,78,78,78,78,78,78,78};
uint8_t High_humidity = 0;
int main()
{
//===========================================================================
for (uint8_t i = 0 ; i < 15 ; i ++){
if (Data_array_negative[i] > 100){
a = 1;
}
if (Data_array_negative[i] < 100){
a = 0;
}
//---------------------------------------------------------------------------
if ( i >= 3 && i <= 10){
printf("cnt: %d -- %d \n",Data_array_negative[i], a );
High_humidity = ( High_humidity + a) << 1;
printf("High_humidity: %d \n",High_humidity );
}
}
//---------------------------------------------------------------------------
return 0;
}
Ответы (1 шт):
Автор решения: Юрий Козлов
→ Ссылка
Вы немного ошиблись с порядком действий.
Замените строку
High_humidity = ( High_humidity + a) << 1;
на строку
High_humidity = ( High_humidity << 1) + a;