[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Преобразование двоичной последовательности
Credo64
Есть двоичные последовательности длинны N
000
001
010
011
100
101
110
111
Требуется вычисть первый символ последовательности из второго символа, а последний вычисть из первого т.е. получить такое

000 -> 000
001 -> 011
010 -> 110
011 -> 101
100 -> 101
101 -> 110
110 -> 011
111 -> 000
Помогите пожалуйста или направьте, куда копать

P.s. опечатался, не сложить а вычисть



Спустя 5 минут, 47 секунд (22.05.2011 - 12:37) alex12060 написал(а):
Побитовые сдвиги тебе наверное нужны...

Спустя 19 минут, 21 секунда (22.05.2011 - 12:56) Credo64 написал(а):
А если такая функция посимвольного вычитания?

Спустя 4 минуты, 13 секунд (22.05.2011 - 13:00) waldicom написал(а):
Странные примеры какие-то... Что за первый бит? MSB или LSB? Где перенеос при сложении?
Цитата (alex12060 @ 22.05.2011 - 10:37)
Побитовые сдвиги тебе наверное нужны...

Это вряд ли. При сдивге битов места заполняются нулями, в данном случае не это нужно.

Спустя 2 минуты, 29 секунд (22.05.2011 - 13:03) Credo64 написал(а):
На самом деле здесь подразумевается обычная строка из нулей и единиц.
Есть предположение что нужно передвинуть первый символ на место последнего и вычисть исходную последовательность посимвольно, т.е.

000 => 000 ну тут без изменений = 000
001 => 010 а тут вычитаем исходную 010-001 получаем = 011
010 => 100 а тут вычитаем исходную 100-010 получаем = 110
011 => 110 а тут вычитаем исходную 110-011 получаем = 101
100 => 001 а тут вычитаем исходную 001-100 получаем = 101
101 => 011 а тут вычитаем исходную 011-101 получаем = 110
110 => 110 а тут вычитаем исходную 110-110 получаем = 011
111 => 111 а тут вычитаем исходную 111-111 получаем = 000

В результате получаем то что требуется
000 -> 000
001 -> 011
010 -> 110
011 -> 101
100 -> 101
101 -> 110
110 -> 011
111 -> 000

Спустя 4 часа, 51 минута, 45 секунд (22.05.2011 - 17:54) Credo64 написал(а):
Ладно уже не актуально, но если вдруг кому пригодится то вот прога на питоне:

n = int(input("Введите n: "))

arr_in = [i for i in range(2**n)]
arr_out = []

for i in range(len(arr_in)):
arr_in[i] = bin(arr_in[i])[-(len(bin(arr_in[i]))-2):]
while len(arr_in[i]) < n:
arr_in[i]='0' + arr_in[i]
st = ''
pr = arr_in[i][0]
for j in reversed(range(1,len(arr_in[i]))):
st = str(abs(int(arr_in[i][j]) - int(pr))) + st
pr = arr_in[i][j]
st = str(abs(int(arr_in[i][0]) - int(pr))) + st
arr_out.append(st)


with open('results\out.txt','w') as f:
f.write('digraph {\n')
for i in range(len(arr_in)):
f.write('%s -> %s\n'%(arr_in[i],arr_out[i]))
f.write('}\n')

Спустя 14 часов, 49 минут, 45 секунд (23.05.2011 - 08:44) linker написал(а):
Или я не понял, или у вас оригинальное вычитание 010 - 001 = 011 это равносильно 2 - 1 = 3
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.