avr — как объединить значения одного массива в одно целое Переполнение стека

Как я могу объединить значения одного массива в одно целое и вверх дном?

example: a[]=0b1011,0b1111 to 10111111 and 10010101 to b[]=0b1001,0b0101

-3

Решение

<< а также | «вставить» два целых числа вместе, >> а также & разобрать их на части.

Например, (3 << 4) | 5 это 53, 53 >> 4 это 3, 53 & 7 это 5.
(Перевод целых чисел в двоичную запись оставлен в качестве упражнения.)

0

Другие решения

Вам необходимо скрыть типы так, чтобы значения могли содержать 8 бит (символ или uint8 подойдут в зависимости от того, что вам нужно). Я не уверен, какой тип у вас там, как его 4 бита. Вам лучше переопределить тип как uint8 или что-то в этом роде, так что [0] = 0b00001011.

Как только у вас будет правильное количество бит, нужно сдвинуть бит на первое значение влево на 4, затем используйте побитовый оператор ИЛИ, взяв ваш пример:

int8 myValue = a[0] << 4 | a[1]

Вот что происходит

  • Сдвиг: a [0] << 4 означает, что каждый бит сдвигается влево 4 раза, поэтому 0b00001011 становится 0b10110000 (биты, входящие в правое значение по умолчанию как 0)
  • Побитовое ИЛИ: a [0] << 4 | [1], | сравнивает каждый бит из [0] с [1]. Если один из битов равен 1, он дает 1, если оба равны 0, он дает 0, т.е.

    10110000 | 00001111 = 10111111

С ног на голову, я полагаю, вы имеете в виду наоборот?

Вам нужно будет использовать побитовое И &и сделать что-то подобное, так что я не буду объяснять подробно снова, но это

a[0] = (myValue & 0b1111000) >> 4 = 00001011

a[1] = myValue & 0b00001111 = 00001111

Надеюсь, это поможет.

0

TNQ за помощь, я хочу код, чтобы сделать это

a[]={1,2,3,5,8,6,7,4};
result=a[0,1,2,3]+a[4,5,6,7];
result-->9909
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector