Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2012, 14:37
Noqrax Noqrax вне форума
Прохожий
 
Регистрация: 06.04.2012
Сообщения: 8
Репутация: 10
Сообщение Код Грея

Здравствуйте,
В процессе программирования у меня возникла проблема.
Кодирование происходит по алгоритму (взято с википедии):

Код:
function BinToGray(b: integer): integer;
begin
  BinToGray := b xor (b shr 1)
end;

При вводе числа например 10110 программа выведет 13505, что не верно, ведь результат должен быть бинарным.

Ошибка конечно очевидна. Но я совсем не представляю как это организовать.

Xor адекватно работает с числами в 16-ричном представлении (если я не напутал), т.е. числа с $. Но опять же как перевести псевдо-бинарное число в шестнадцатиричную запись, а потом наоборот?
Ответить с цитированием
  #2  
Старый 12.05.2012, 14:48
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

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);
strbinary - то что было
number - то что будет
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 12.05.2012, 14:55
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

нет, программа выдает все правильно:
10110 = 10011101111110b
10110 shr 1 = 1001110111111b
10011101111110b xor 01001110111111b = 11010011000001b = 13505
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 12.05.2012, 17:58
Noqrax Noqrax вне форума
Прохожий
 
Регистрация: 06.04.2012
Сообщения: 8
Репутация: 10
Радость

Спасибо за помощь я разобрался.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025