Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Портирую код с си на паскаль.
Как реализовать выреку центральных шестнадцати бит числа 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
По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

Код:
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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


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