如何在一个整数c ++中合并一个数组值

问题描述 投票:-3回答:3

如何在一个整数中合并一个数组值并颠倒?

example: a[]=0b1011,0b1111 to 10111111 and 10010101 to b[]=0b1001,0b0101
c++ avr atmega16
3个回答
0
投票

<<|将两个整数“粘贴”在一起,>>&将它们分开。

例如,(3 << 4) | 5是53,53 >> 4是3,53 & 7是5。 (将整数转换为二进制表示法作为练习。)


0
投票

你需要隐藏类型,以便它们可以保存8位(char或uint8可以根据你的需要做)。我不确定你的4位是什么类型的。你最好将类型重新定义为uint8或类似的东西[0] = 0b00001011。

一旦你有正确的位数需要将第一个值的位移4,那么使用按位OR运算符,以你的例子为例,

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

这是最近发生的事情

  • Bitshift:a [0] << 4表示向左移动每一位4次,因此0b00001011变为0b10110000(右边默认为0的位)
  • 按位OR:a [0] << 4 | a [1],|将[0]中的每一位与[1]进行比较。如果比特中的任何一个是1,则它给出1,如果两者都是0,则给出0,即 10110000 | 00001111 = 10111111

颠倒我认为你的意思相反?

你需要使用按位AND&,并做类似的事情,所以我不会再详细解释,但它的这一点

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
© www.soinside.com 2019 - 2024. All rights reserved.