![]() |
|
|
#1
|
|||
|
|||
![]() Народ, всем привет!
Кто знает объясните, пожалуйста, кто знает принцип работы функций 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
|
||||
|
||||
![]() Вообще-то нужно ещё одно значение для даной операции - это количество бит, на которое нужно спестить.
Или это у тебя какие-то самописные ф-ии в которых задано константное значение сдвига, т.к. такого вызова как у тебя я нигде не встречал. В твоем кажется: Код:
val := val shl 8; Меня греют ваши плюсы к моей репутации... Последний раз редактировалось BoRoV, 11.01.2011 в 22:33. |
#3
|
|||
|
|||
![]() Да, ты верно понял. В моем случае это именно так.
Ф-ия Shl и Shr нигде в проге не объявлены. Поэтому я и не понимаю принципа работы данных ф-ий... |
#4
|
||||
|
||||
![]() shl осуществляет сдвиг влево целого числа и его не где не надо объявлять.
Код:
procedure TForm1.Button1Click(Sender: TObject); var x: Integer; begin x := $5ABC; x := x shl 1; ShowMessage(IntToStr(x)); end; Помогаю за Спасибо ![]() |
#5
|
||||
|
||||
![]() Например 4 shr 1 дадут 2, т.е. идет деление на 2 причем в отличии от обычного деления / результат уже будет целочисленным и выполняется эта операция существенно быстрее.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
![]() То что эти функции смещают биты, я понял.
Для меня не понятно по какому принципу они добавляют биты Пример 3: 56841027 Shl 8 = 1666401024 56841027 11011000110101001101000011 1666401024 1100011010100110100001100000000 В этом примере происходит и смещение и добавление |