Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 31.08.2011, 20:45   #1
dukales
Форумчанин
 
Регистрация: 26.06.2011
Сообщений: 58
Репутация: 8
Радость Вырезка бит в паскале.

Портирую код с си на паскаль.
Как реализовать выреку центральных шестнадцати бит числа Integer
код на си:
Код:

unsigned short int Alhorythm_of_MiddleSquare(unsigned short int data)
{
unsigned int result; //unsigned int - 4 байта , что в 2 раза больше ,чем  2 байта  unsigned short int
result=unsigned int(data)*unsigned int(data);
result=result<<8;//Вырезаем
result=result>>16;//центральные 16 бит
return unsigned short int(result % N); //Деление по модулю , чтобы значение можно
//было использовать для индекса массива
}

код на паскале:
Код:

function a_of_m(data : shortint);
var res: integer;
begin
resulr:=data*data;
?????

Собственно, вопрос, как это сделать? Заранее спасибо.
dukales вне форума   Ответить с цитированием
Старый 31.08.2011, 20:49   #2
_-Re@l-_
C++, Java
Профессионал
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Адрес: Екатеринбург
Сообщений: 2,665
Репутация: 420
По умолчанию

Значит так.
В Си операторы сдвига - >> и <<.
А в Паскале - shl(<<) и shr(>>).
А деление по модулю(т.е. остаток от целочисленного деления) - mod. Ясно?
_-Re@l-_ вне форума   Ответить с цитированием
Старый 31.08.2011, 21:00   #3
dukales
Форумчанин
 
Регистрация: 26.06.2011
Сообщений: 58
Репутация: 8
По умолчанию

ну это понятно, а как вырезать центральные 16 бит?
разделить длинну числа на пополам и потом вырезать влево раз и вправо?:
dukales вне форума   Ответить с цитированием
Старый 31.08.2011, 21:24   #4
flance
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 176
Репутация: 105
По умолчанию

Всего 32 бита. Нужно получить центральные 16 бит.
Для наглядности в виде байтов. В байте как известно 8 бит.

[байт А][байт Б][байт В][байт Г]

сначала влево на 8 бит

[байт Б][байт В][байт Г][00000000]

потом вправо на 16 бит

[00000000][00000000][байт Б][байт В]

Че непонятно-то?
__________________
Программист-фрилансер, готовый рассмотреть предложения на постоянную удаленную работу... Ответственный, трудолюбивый
skype: flancejob
flance вне форума   Ответить с цитированием
Старый 01.09.2011, 13:33   #5
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 21,006
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

а ничего что в паскале integer 16 бит занимает?

или у вас Free Pascal?(или иное не под ДОС)
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 01.09.2011, 22:26   #6
dukales
Форумчанин
 
Регистрация: 26.06.2011
Сообщений: 58
Репутация: 8
По умолчанию

ну так) 16 бит в паскале и делфи. то есть вырезаем средние 2 байта, сдвиг влево и сдвиг вправо. я не прав?:
dukales вне форума   Ответить с цитированием
Старый 02.09.2011, 05:57   #7
veniside
Профессионал
 
Регистрация: 03.01.2011
Сообщений: 2,508
Репутация: 868
По умолчанию

Код:

function Alhorythm_of_MiddleSquare(data: word): word;
var
  res: LongWord;
begin
  res := LongWord(data) * LongWord(data);
  res := res shl 8;
  res := res shr 16;
  result := (res mod N);
end;

можно сократить до:

Код:

result := ((LongWord(data) * data) shr 8) and $FFFF) mod N;

__________________
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вырезка изображения и переменные Максим139 Помощь студентам 0 31.03.2011 17:31
Canvas, вырезка, буфер... Максим139 Помощь студентам 0 28.03.2011 19:05
ОС: 32 vs 64 бит Буратино Операционные системы общие вопросы 29 18.01.2011 12:10
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 14:38
выделить бит odi_noki Паскаль 10 15.10.2008 00:43


17:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru