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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.02.2009, 18:28
Аватар для Sindy
Sindy Sindy вне форума
Прохожий
 
Регистрация: 22.02.2009
Сообщения: 14
Репутация: 10
По умолчанию Помогите подправить код оч надо СС

Задачка! есть число 321989543 (например)! мы переводим его в 2 СС и инвертируем в нем ВТОРОЙ байт!потом полученное число мы переводим в 10СС!

ВОт мой код только чтото не получатеся)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var n1,n2:integer;
begin
 n1 := StrToInt(Edit1.Text);
 n2 := n1 xor $0000FF00;
 Edit2.Text := IntToStr(n2);
end;
Admin: Пользуемся тегами!

напишите пожалуйста как правильно будет?))

Последний раз редактировалось Admin, 25.02.2009 в 18:31.
Ответить с цитированием
  #2  
Старый 25.02.2009, 18:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Зачем переводить туда-сюда?

может так:
Код:
var
  N : WORD;
begin
  N := (N And $FF00) Or (Not (N And $00FF));
end;

Логика (в кв. скобках - результат операции под соотв. номером):
1. N And $FF00 - получаем старший байт с нулевым младшим байтом.
2. N And $00FF - получаем младший байт.
3. Not ([2]) - инвертированый младший байт.
4. [1] Or [3] - объединяем результат.
Вроде правильно.
Для DWORD (который Integer) сам поправишь - принципиально не меняется, только маски соответсвующие нужны.
Ответить с цитированием
  #3  
Старый 25.02.2009, 18:42
Аватар для Sindy
Sindy Sindy вне форума
Прохожий
 
Регистрация: 22.02.2009
Сообщения: 14
Репутация: 10
По умолчанию

спасиба)а что такое маски?))и как их подправить))
Ответить с цитированием
  #4  
Старый 25.02.2009, 20:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

маски, в данном случае) - это константы, используемые для выделения некоторой части данных на битовом уровне. Кстати, там у меня есть ошибка [3] надо еще раз замаскировать по And с $00FF, т.е. обратно старший байт сбросить в 0. Т.е. должно быть, кажется, так:

Код:
N := (N And $FF00) Or ((Not (N And $00FF)) And $00FF);
Ответить с цитированием
  #5  
Старый 25.02.2009, 21:11
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

А если хорошо подумать, то:
Код:
n := n xor $ff00;
Вот, открываем что то новое : Булева алгебра

зы. DWORD с Integer путать не советую из-за знака.

Последний раз редактировалось 0nni, 25.02.2009 в 21:30.
Ответить с цитированием
  #6  
Старый 25.02.2009, 23:13
Аватар для Sindy
Sindy Sindy вне форума
Прохожий
 
Регистрация: 22.02.2009
Сообщения: 14
Репутация: 10
По умолчанию

Спачибо вам большое))
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter