Как можно объединить значения одного массива в одно целое число C ++ - PullRequest
0 голосов
/ 25 октября 2018

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

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

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

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

Если у вас есть нужное количество бит, необходимо сдвинуть первое значение влево на 4, а затем использовать побитовоеОператор ИЛИ, на вашем примере,

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

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

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

    10110000 |00001111 = 10111111

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

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

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

a[1] = myValue & 0b00001111 = 00001111

Надеюсь, что помогает.

0 голосов
/ 25 октября 2018

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

a[]={1,2,3,5,8,6,7,4};
result=a[0,1,2,3]+a[4,5,6,7];
result-->9909
0 голосов
/ 25 октября 2018

<< и | для «вставки» двух целых чисел, >> и & для их разделения.

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

...