With plain bit operations, this is how you can do it.
array1 = [00000001, 00000010, 00000011, 00000100]
array2 = [00000100, 00000011, 00000100]
Get first index of array2.
array2[0] = 00000100
Apply following:
result = array2[0] << 6
result >>>= 6 (Unsigned, since we don't care about sign here)
Now, apply following:
result2 = array1[0] >>> 2
result2 <<= 2
And then:
result1 | result2
For explaining with respect to your given data, I will apply it on index 1 of both arrays.
array2[1] = 00000011
So, first
00000011 << 6 will give 11000000
Now, apply unsigned right shift on the result.
11000000 >>> 6 will give 00000011
Applying on array1[1]
array1[1] = 00000010
So,
00000010 >>> 2 will give 0000 0000
and
0000 0000 << 2 will give 0000 0000
Now, apply | on two results.
0000 0000 | 0000 0011 will give 0000 0011
Explanation
You might be wondering why performing operations twice? For example, on array2, I first performed a left shift of 6 bits and then an unsigned right shift of 6 bits?
Left shift of 6 bits will remove all other bits in array2 since, we don't require them for this operation (we don't care whatever those bits were)
Unsigned right shift of 6 bits again will bring our last 2 bits of array2 back to normal position since that is all what matters for our final result.
Now, first an unsigned right shift on array1 of 2 bits, will drop last 2 bits and applying left shift of 2 bits again, will set them as 0 and OR'ing (|) them will add last 2 bits in the final result.