|
2D-программирование Вопросы, касающиеся двумерного программирования |
22.11.2007, 15:00
|
#1
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Shl, Shr, Sar
что делают ети команды ??
насколько мне известно это что то типа для работы с битами (сдвигов в ЛЕВО/ПРАВО) !!
я точно незнаю !!
обясните плиз как ними пользоватся !!
PS: help читал... ...плохо !!
|
(Offline)
|
|
22.11.2007, 15:36
|
#2
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Re: Shl, Shr, Sar
temp shr n - сдвиг битов вправо, то же самое что temp / (2^n)
temp shl n - сдвиг битов влево, то же самое что temp * (2^n)
применяется только к целым положительным числам.
например: есть ширина экрана 640 высота 480
scrwidth = 640
scrheight = 480
тогда центр экрана
halfwidth = scrwidth shr 1 ; scrwidth / (2^1)
halfheight = scrheight shr 1 ; scrheight / (2^1)
|
(Offline)
|
|
22.11.2007, 15:37
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Shl, Shr, Sar
x=123
DebugLog(Bin(x))
DebugLog(Bin(x Shl 1))
DebugLog(Bin(x Shr 1))
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.11.2007, 15:55
|
#4
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Shl, Shr, Sar
ага shr - умножаем , shl - делим !!
а что означает:
value = temp shl 2 And $FFFFFF
x=123
DebugLog(Bin(x))
DebugLog(Bin(x Shl 1))
DebugLog(Bin(x Shr 1))
|
to imper: что это ??
|
(Offline)
|
|
22.11.2007, 16:18
|
#5
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Re: Shl, Shr, Sar
Импер имел ввиду вот что: двоичное представление x это bin(x), посмотри, int это 4 байта или 32 бита. shr & shl & and & or & xor - это операции над битами! И поэтому инт-ы лучше созерцать в таком виде, чтобы понять что делают эти команды.
|
(Offline)
|
|
22.11.2007, 16:43
|
#6
|
Бывалый
Регистрация: 20.11.2007
Сообщений: 663
Написано 145 полезных сообщений (для 176 пользователей)
|
Re: Shl, Shr, Sar
Shl - двигает число в лево.Это более быстрый метод умножения числа экспоненциально.
Shr - наоборот.двигает число в право.Это быстрый метод деления.
Sar - производит двоичный сдвиг в право.Отличается от Shl тем что заполняет пустые биты.Полезность этой команды заключается в более быстром математическом выполнении расчетов.
|
(Offline)
|
|
22.11.2007, 16:49
|
#7
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Shl, Shr, Sar
Сообщение от dimanche13
применяется только к целым положительным числам.
|
Неправда. Любые числа в комьютере представлены последовательностью битов. Просто с целыми положительными легче предсказать результат операции)
IGR
http://ru.wikipedia.org/wiki/%D0%91%...86%D0%B8%D0%B8
|
(Offline)
|
|
22.11.2007, 16:58
|
#8
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Re: Shl, Shr, Sar
alcoSHoLiK, я в курсе что "любые числа в комьютере представлены последовательностью битов". А отрицательные числа в обратном коде, где старший разряд определяет знак, значит сдвигать нельзя. То есть можно, но результат будет неправильным.
|
(Offline)
|
|
22.11.2007, 17:14
|
#9
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Shl, Shr, Sar
В дополнительном.
Сдвигать можно и даже нужно. Выше было сказано про Sar, она как раз и сохраняет знаковый бит на его месте.
|
(Offline)
|
|
22.11.2007, 17:17
|
#10
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Re: Shl, Shr, Sar
Сообщение от alcoSHoLiK
Sar, она как раз и сохраняет знаковый бит на его месте.
|
а я разве про это не сказал? Блин, забыл
ЗЫ, может и дополнительный называется, давно уж отучился и забыл все названия Вообще советую всем ознакомиться со ссылкой alcoSHoLiK-а.
|
(Offline)
|
|
22.11.2007, 17:36
|
#11
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Shl, Shr, Sar
ну с битовыми о-циями я знаком (с уч. курса) !!
а как насчет:
а что означает:
value = temp shl 2 And $FFFFFF
|
|
(Offline)
|
|
22.11.2007, 17:41
|
#12
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Shl, Shr, Sar
Первая половина твоего сообщения противоречит второй.
|
(Offline)
|
|
22.11.2007, 18:59
|
#13
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Shl, Shr, Sar
Первая половина твоего сообщения противоречит второй.
|
Ладн, будем учится на ошибках !!
value = temp shl 2 And $FFFFFF аналогично:
value = temp*4 + 16777215 !!
Да/Нет ??
|
(Offline)
|
|
22.11.2007, 19:17
|
#14
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Shl, Shr, Sar
Нет.
«(Логическое) И» (and) — аналог конъюнкции в логике. Иногда называется логическим умножением.
Выдаёт 1 если оба входа равны 1, в противном случае 0. Если один из аргументов равен 1, то результат «И» равен другому. Если один из аргументов равен 0, то результат «И» равен 0 независимо от значения другого аргумента.
|
Представь число temp в двоичном виде, тогда все станет ясно:
temp = 880
temp: 000000000000001101110000
$FFFFFF: 111111111111111111111111
----------------------------------------
Result: 000000000000001101110000
Более приближенный к реальности пример. Если тебе нужно зациклить переменную, т.е. сделать, чтобы при достижение определенного максимального значения она обнулялась, сделать это можно так:
max = $FF
x = (x + 1) and max
Битовое представление:
x = 30
x: 11110
$FF: 11111
-------------
11110
// прибавляем единицу, x =31
x: 11111
$FF: 11111
-------------
11111
// прибавляем единицу еще раз, x = 32
x: 100000
$FF: 011111
--------------
x = 0
|
(Offline)
|
|
23.11.2007, 14:28
|
#15
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Shl, Shr, Sar
спс !!
врод понял !!
value = 452 это 111000100
$fff это 111111111111
000111000100
111111111111
--------------
000111000100 - результат !!
Да/Нет ??
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:23.
|