ChannelCoding Ответов: 1

Как сделать все возможные изменения битов в кодовом слове?


У меня есть кодовое слово u, и мне нужно сделать программу, которая позволяет :
для 1<=i<=k произведите все возможные изменения l из k битов в u.

Пример 1:
if u = [1 1 0 1] ; k = 4 and l = 1


мы получаем :
u1 = [0 1 0 1] ; u2 = [1 0 0 1] ; u3 = [1 1 1 1] and u4 = [1 1 0 0].


Пример 2 :
if u = [1 0 0 ] ; k = 3  and l = 1


мы получаем :
u1 = [0 0 0] ; u2 = [1 1 0] and u3 = [1 0 1].


Я пытался программировать, но получаю :

if k = 3 and l = 1
u1 = [1 00] ; u2 = [010] and u3 = [001]


Что я уже пробовал:

Мой код :

l = 1;
ind = nchoosek(1:k, l);
t = size(ind,1);
u1 = zeros(t,k);
u1(bsxfun(@plus, (ind-1)*t, (1:t).')) = 1; 

PIEBALDconsult

Пожалуйста, используйте "улучшить вопрос", чтобы объяснить, что вы пытаетесь сделать более четко.

1 Ответов

Рейтинг:
2

RAMASWAMY EKAMBARAM

Я не знаю MATLAB и ваше требование не очень ясно но следующий код C достигает вывода примеров

int u = 0x0d;   // 1101
int k = 4;
int l, result;

for(l = 1 << (k - 1); l != 0; l >>= 1)
{
	result = u ^ l; // 0101 = 1101 XOR 1000, 1001 = 1101 XOR 100, 1111 = 1101 XOR 10, 1100 = 1101 XOR 1
}
// it just remains to express 'result' in the form [b1 b2 b3 b4] - where b1 .. b4 are the bit values

приведенный выше код также работает для второго примера с 3 битами с соответствующими изменениями значений u и k.