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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2011, 22:12
darkfox darkfox вне форума
Прохожий
 
Регистрация: 07.01.2011
Сообщения: 7
Репутация: 10
Вопрос Shl(x) Shr(x)

Народ, всем привет!
Кто знает объясните, пожалуйста, кто знает принцип работы функций Shl и Shr.
Примеры:
1)
909456435 Shl 8 = 892613376
909456435
110110001101010011010000110011

892613376
110101001101000011001100000000

2)
454728217 Shl 8 = 446306560
454728217
11011000110101001101000011001

446306560
11010100110100001100100000000

3)
56841027 Shl 8 = 1666401024
56841027
11011000110101001101000011

1666401024
1100011010100110100001100000000


Эти функции смещаю биты и добавляют их.
По какому принципу это происходит?

Последний раз редактировалось darkfox, 12.01.2011 в 18:18.
Ответить с цитированием
  #2  
Старый 11.01.2011, 22:22
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Вообще-то нужно ещё одно значение для даной операции - это количество бит, на которое нужно спестить.

Или это у тебя какие-то самописные ф-ии в которых задано константное значение сдвига, т.к. такого вызова как у тебя я нигде не встречал.

В твоем кажется:
Код:
val := val shl 8;
__________________
Меня греют ваши плюсы к моей репутации...

Последний раз редактировалось BoRoV, 11.01.2011 в 22:33.
Ответить с цитированием
  #3  
Старый 11.01.2011, 23:39
darkfox darkfox вне форума
Прохожий
 
Регистрация: 07.01.2011
Сообщения: 7
Репутация: 10
По умолчанию

Да, ты верно понял. В моем случае это именно так.
Ф-ия Shl и Shr нигде в проге не объявлены.
Поэтому я и не понимаю принципа работы данных ф-ий...
Ответить с цитированием
  #4  
Старый 11.01.2011, 23:51
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

shl осуществляет сдвиг влево целого числа и его не где не надо объявлять.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x: Integer;
begin
  x := $5ABC;
  x := x shl 1;
  ShowMessage(IntToStr(x));
end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 12.01.2011, 08:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Например 4 shr 1 дадут 2, т.е. идет деление на 2 причем в отличии от обычного деления / результат уже будет целочисленным и выполняется эта операция существенно быстрее.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 12.01.2011, 18:17
darkfox darkfox вне форума
Прохожий
 
Регистрация: 07.01.2011
Сообщения: 7
Репутация: 10
По умолчанию

То что эти функции смещают биты, я понял.
Для меня не понятно по какому принципу они добавляют биты

Пример 3:

56841027 Shl 8 = 1666401024
56841027
11011000110101001101000011

1666401024
1100011010100110100001100000000

В этом примере происходит и смещение и добавление
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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