задача на побитовый сдвиг

Получаю данные в буфер, если ячейка больше 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;
→ Ссылка