1) Судя по описанию матрицы А - она что-то наподобии битовой маски. Думаю, что обявленный тобой массив М не совсем соответствует етой матрице. Потому что в него ты записал числа 1011(тысяча одинадцать) вместо желаемого 0b1011(одинадцать в двоичной системе) и так далее по аналогии.
2) думаю x & M[ i ] не совсем соответствует операции умножения вектора на вектор + если переписывать умножение по правилам, подозреваю, что стоит помнить о двоичной арифметике(тоесть сумму приводить по модулю 2)
3) в строчке кода
res[q+4]=hamming( Num[q]& 0x0F );
получится выход за границы массива при q >=8.
Учитывая описание процесса шифрования, результирующий массив должен быть в 2 раза больше, чем исходный потому что каждому полубайту исходного ставится в соответствие байт результирующего
4) Неплохо бы для полной красоты знать в коде о происхождении массива Num, ато необьявленный массив немного напрягает ))