|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите подправить код оч надо СС
Задачка! есть число 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, 25.02.2009 в 18:31. |
#2
|
|||
|
|||
Зачем переводить туда-сюда?
может так: Код:
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
|
||||
|
||||
спасиба)а что такое маски?))и как их подправить))
|
#4
|
|||
|
|||
маски, в данном случае) - это константы, используемые для выделения некоторой части данных на битовом уровне. Кстати, там у меня есть ошибка [3] надо еще раз замаскировать по And с $00FF, т.е. обратно старший байт сбросить в 0. Т.е. должно быть, кажется, так:
Код:
N := (N And $FF00) Or ((Not (N And $00FF)) And $00FF); |
#5
|
||||
|
||||
А если хорошо подумать, то:
Код:
n := n xor $ff00; зы. DWORD с Integer путать не советую из-за знака. Последний раз редактировалось 0nni, 25.02.2009 в 21:30. |
#6
|
||||
|
||||
Спачибо вам большое))
|