![]() |
|
|
#1
|
|||
|
|||
![]() Здравствуйте,
В процессе программирования у меня возникла проблема. Кодирование происходит по алгоритму (взято с википедии): Код:
function BinToGray(b: integer): integer; begin BinToGray := b xor (b shr 1) end; При вводе числа например 10110 программа выведет 13505, что не верно, ведь результат должен быть бинарным. Ошибка конечно очевидна. Но я совсем не представляю как это организовать. Xor адекватно работает с числами в 16-ричном представлении (если я не напутал), т.е. числа с $. Но опять же как перевести псевдо-бинарное число в шестнадцатиричную запись, а потом наоборот? |
#2
|
||||
|
||||
![]() XOR - логический оператор. В случае чисел производятся битовые операции с двоичным представлением числа.
Тебе нужно перевести строковое представление двоичного числа в собственно число. примерно так это можо сделать: Код:
strbinary:='111011101010'; number:=0; for i:=0 to length(strbinary)-1 do if strbinary[length(strbinary)-i]='1' then number:=number+(1 shl i); number - то что будет Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
![]() нет, программа выдает все правильно:
10110 = 10011101111110b 10110 shr 1 = 1001110111111b 10011101111110b xor 01001110111111b = 11010011000001b = 13505 Пишу программы за еду. __________________ |
#4
|
|||
|
|||
![]() Спасибо за помощь я разобрался.
![]() |