Как я могу объединить значения одного массива в одно целое и вверх дном?
example: a[]=0b1011,0b1111 to 10111111 and 10010101 to b[]=0b1001,0b0101
<<
а также |
«вставить» два целых числа вместе, >>
а также &
разобрать их на части.
Например, (3 << 4) | 5
это 53, 53 >> 4
это 3, 53 & 7
это 5.
(Перевод целых чисел в двоичную запись оставлен в качестве упражнения.)
Вам необходимо скрыть типы так, чтобы значения могли содержать 8 бит (символ или uint8 подойдут в зависимости от того, что вам нужно). Я не уверен, какой тип у вас там, как его 4 бита. Вам лучше переопределить тип как uint8 или что-то в этом роде, так что [0] = 0b00001011.
Как только у вас будет правильное количество бит, нужно сдвинуть бит на первое значение влево на 4, затем используйте побитовый оператор ИЛИ, взяв ваш пример:
int8 myValue = a[0] << 4 | a[1]
Вот что происходит
Побитовое ИЛИ: a [0] << 4 | [1], | сравнивает каждый бит из [0] с [1]. Если один из битов равен 1, он дает 1, если оба равны 0, он дает 0, т.е.
10110000 | 00001111 = 10111111
С ног на голову, я полагаю, вы имеете в виду наоборот?
Вам нужно будет использовать побитовое И &и сделать что-то подобное, так что я не буду объяснять подробно снова, но это
a[0] = (myValue & 0b1111000) >> 4 = 00001011
a[1] = myValue & 0b00001111 = 00001111
Надеюсь, это поможет.
TNQ за помощь, я хочу код, чтобы сделать это
a[]={1,2,3,5,8,6,7,4};
result=a[0,1,2,3]+a[4,5,6,7];
result-->9909