Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 22.11.2007, 15:00   #1
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Shl, Shr, Sar

что делают ети команды ??
насколько мне известно это что то типа для работы с битами (сдвигов в ЛЕВО/ПРАВО) !!
я точно незнаю !!
обясните плиз как ними пользоватся !!

PS: help читал... ...плохо !!
(Offline)
 
Ответить с цитированием
Старый 22.11.2007, 15:36   #2
dimanche13
Мастер
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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
IGR
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
dimanche13
Мастер
 
Регистрация: 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
newman
Бывалый
 
Регистрация: 20.11.2007
Сообщений: 663
Написано 145 полезных сообщений
(для 176 пользователей)
Re: Shl, Shr, Sar

Shl - двигает число в лево.Это более быстрый метод умножения числа экспоненциально.
Shr - наоборот.двигает число в право.Это быстрый метод деления.
Sar - производит двоичный сдвиг в право.Отличается от Shl тем что заполняет пустые биты.Полезность этой команды заключается в более быстром математическом выполнении расчетов.
(Offline)
 
Ответить с цитированием
Старый 22.11.2007, 16:49   #7
alcoSHoLiK
Дэвелопер
 
Регистрация: 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
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Shl, Shr, Sar

alcoSHoLiK, я в курсе что "любые числа в комьютере представлены последовательностью битов". А отрицательные числа в обратном коде, где старший разряд определяет знак, значит сдвигать нельзя. То есть можно, но результат будет неправильным.
__________________
(Offline)
 
Ответить с цитированием
Старый 22.11.2007, 17:14   #9
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Shl, Shr, Sar

В дополнительном.
Сдвигать можно и даже нужно. Выше было сказано про Sar, она как раз и сохраняет знаковый бит на его месте.
(Offline)
 
Ответить с цитированием
Старый 22.11.2007, 17:17   #10
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Shl, Shr, Sar

Сообщение от alcoSHoLiK
Sar, она как раз и сохраняет знаковый бит на его месте.
а я разве про это не сказал? Блин, забыл
ЗЫ, может и дополнительный называется, давно уж отучился и забыл все названия Вообще советую всем ознакомиться со ссылкой alcoSHoLiK-а.
__________________
(Offline)
 
Ответить с цитированием
Старый 22.11.2007, 17:36   #11
IGR
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
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Shl, Shr, Sar

Первая половина твоего сообщения противоречит второй.
(Offline)
 
Ответить с цитированием
Старый 22.11.2007, 18:59   #13
IGR
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
alcoSHoLiK
Дэвелопер
 
Регистрация: 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
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: Shl, Shr, Sar

спс !!
врод понял !!

value = 452 это 111000100
$fff это 111111111111

000111000100
111111111111
--------------
000111000100 - результат !!

Да/Нет ??
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +4, время: 13:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com