05:01
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: Dima-kun  
Битовое хранение данных (флагов)
ZiGGiДата: Среда, 04.05.2011, 18:41 | Сообщение # 16
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (toneysix)
завещающий символ вообще-то \0

Oops.. :)
Quote (toneysix)
в чем исправление вопрос?

ну я думаю врят-ли кто-то понял, почему для хранения слова "текст", нужно не 10, а 12 байтов...
ну и 1 байт был лишним



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]


Сообщение отредактировал ZZiGGi - Среда, 04.05.2011, 18:49
toneysixДата: Среда, 04.05.2011, 18:51 | Сообщение # 17
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
ZZiGGi тема далеко не для новичков, а сам по себе нулевой байт является основой си-подобных языков.
P.S: Про 1 байт забудь, можно придраться к любому, было бы желание не правда ли?
Кстати, ты не в курсе сколько байт отводится для типа BOOL в павн? Я знаю точно, что 2 байта там есть, потому что я пробовал заносить туда текст, в си 1 байт, а вот в павн интересно сколько, можно попробовать узнать диапазон присваивая разные диапазоны значений байтов.
Короче выяснил, 4 байта)
new bool: lol;
lol = bool: 2147483647;
printf("ну чо бул %d",bool: lol);

Увеличь её на 1 и получишь каракули)
Так что можете спокойно использовать INT, bool в павн просто показуха типа)



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Среда, 04.05.2011, 18:55
ZiGGiДата: Среда, 04.05.2011, 19:06 | Сообщение # 18
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (toneysix)
Короче выяснил, 4 байта)
new bool: lol;
lol = bool: 2147483647;
printf("ну чо бул %d",bool: lol);
Увеличь её на 1 и получишь каракули)
Так что можете спокойно использовать INT, bool в павн просто показуха типа)

про это ещё MX_Master писал, что нет смысла использовать bool ибо от него никакого толку нету :)
но bool хорош тем, что true/false лучше видны чем 1/0 :D
и никто не запрещает делать так :) :
new bool:b[1 char];
b[0] = true;
printf("%d",b[0]);

ps кстати, как я заметил, разницы в b{0} и b[0] нет вообще...


Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]
toneysixДата: Среда, 04.05.2011, 19:10 | Сообщение # 19
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
ZZiGGi Я лично ток сегодня узнал, все руки до типов в павн не доходили, на счет порнографии с char и bool брось) true и false всего-лишь константа, макрос насколько я понимаю, лучше не заниматься порнографией использовать char без никаких других тегов, которые в целом ничего толкового не делают, на счет скобок это да, я тоже тестировал разные ситуации с этим приемом и понял, что все это ерунда, видимо в павн сделали что-то типа аналога квадратных скобок.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
ZiGGiДата: Среда, 04.05.2011, 19:18 | Сообщение # 20
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (toneysix)
на счет порнографии с char и bool брось

Quote (toneysix)
которые в целом ничего толкового не делают

ну я же писал почему bool это хорошо:) мелочь, а приятно
В принципе, можно и так использовать:
new b[1 char];
b[0] = true;
if(b[0] == true)
printf("%d",b[0]);
Жаль, что выдает: warning 213: tag mismatch, можно-ли как-то от него избавиться?



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]
toneysixДата: Среда, 04.05.2011, 19:22 | Сообщение # 21
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
printf("%d",bool: b[0]); а так?
Ай секунды не досмотрел
if(bool: b[0] == true)



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Среда, 04.05.2011, 19:24
ZiGGiДата: Среда, 04.05.2011, 19:28 | Сообщение # 22
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (toneysix)
if(bool: b[0] == true)

точно :)



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]
toneysixДата: Среда, 04.05.2011, 19:39 | Сообщение # 23
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Мне кажется, что в павн вообще нет такого типа бул, это просто тег, который можно сделать к любой другой переменной, например прообраз була:
#define filse bil: 0
#define trie bil: 1
new bil: lol;
lol = trie;
if(lol) return true;



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
EakwarpДата: Среда, 04.05.2011, 19:39 | Сообщение # 24
Мастер джэдай
Группа: Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус:
модернизациям инновации, наконец :)


More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.


Valakas Roleplay on Twitter

Платные консультации, разработка, в ICQ. Дорого.
RomaniusДата: Среда, 04.05.2011, 23:25 | Сообщение # 25
Новенький
Группа: Продвинутые
Сообщений: 24
Награды: 1
Город: Bishkek
Репутация: 47
Замечания: 0%
Статус:
1 char = 1 байт может иметь значения от 0 до 255 (только положительные) 1 байт = 8 бит. Не путайте пожалуйста.

если и хранить флаги, как вы тут говорите, то можно жить гораздо проще.

Code

enum FLAGS ( <<= 1 )
{
     NONE = 0,
     NO_1,
     NO_2,
     NO_3,
}

new var = _:FLAGS:NONE;

// Добавляем в переменную флаг.

var |= _:FLAGS:NO_1;
var |= _:FLAGS:NO_3;

// Проверяем, есть ли такой флаг

if(var & _:FLAGS:NO_1 || var & _:FLAGS_NO_2) printf("Flags found");

// Удаляем флаги
var &= ~_:FLAGS:NO_1;
var &= ~_:FLAGS:NO_2;

Даже об этом на офф. вики написано. http://wiki.sa-mp.com/wiki/Keywords:Initialisers#enum тут как раз объяснение идет.

toneysixДата: Среда, 04.05.2011, 23:43 | Сообщение # 26
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Короче все эти типы это муляж.. В павн-лишь один тип - ячейка (4 байта), а этот оператор char дает разрешение на чтение по-байтно, а в остальном Float тоже является псевдо-типом, в который тоже можно записать текст и любые другие данные, при компиляции препроцессор сам автоматом подстраивает под требуемые типы, далее насчет пара фигурных скобок это и есть обращение к байту который дает оператор char, flag{playerid}, в этом и отличии, теперь все становится на свои места. И объявление также происходит по другому принципу
new text[7 char] = !"primer"; // вот например так записывает текст по-байтно в наш массив.
Доступ к символам осуществляется с помощью пара фигурных скобок:
text{0} = 'c';
Вообще не язык, а сплошной дурдом)
Romanius перечитай первый пост не удосужься и покажи, кто говорил иначе.
P.S: Специально для слепых и тех кто читает между строк http://best.of.by/paste/f37259363
Такое ощущение, что ты прочитал две строчки и быстрее побежал писать сообщение, которое полностью подтверждает первый пост, что за люди ей богу, сами не знают и другим навешивают...



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Четверг, 05.05.2011, 00:01
RomaniusДата: Четверг, 05.05.2011, 11:28 | Сообщение # 27
Новенький
Группа: Продвинутые
Сообщений: 24
Награды: 1
Город: Bishkek
Репутация: 47
Замечания: 0%
Статус:
toneysix, ссылка на якобы пастбин не работала. Я думал, по загаловку, что тут об этом написано, но когда заметил резкий скачек на оператор char то сразу в голове все перемешалось, + ссылка была не рабочая. Не верное определение об операторе char. printf("%d", 64 char);. Char просто высчитывает необходимое кол-во байт. printf("%d", 1 char); printf("%d", 2 char); printf("%d", 4 char);. Думаю разница видна.
toneysixДата: Четверг, 05.05.2011, 12:41 | Сообщение # 28
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Romanius непросто высвечивает, делит на 4 и дает доступ не только к содержимому ячейке, но и к содержимому байта, но в павн нет спецификатора, который бы выводил такого рода переменные, вывести можно только через символ, спецификатор %s уже не читает подобные данные. К тому определения я не давал, я дал принцип работы, ты всего-лишь дополнил.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
RomaniusДата: Четверг, 05.05.2011, 13:19 | Сообщение # 29
Новенький
Группа: Продвинутые
Сообщений: 24
Награды: 1
Город: Bishkek
Репутация: 47
Замечания: 0%
Статус:
механизм подсчета: 500 char это 500/4, 47 char это 47/4 + 1 (т.к. для хранения 47 байт недостаточно 11 pawn ячеек)

http://forum.sa-mp.com/showpost.php?p=724943&postcount=116

Почему format и printf не берет такие строки? потому, что функция format и printf были встроены разработчиками мульта, и они не предусмотрели пакованные строки в аргументах.

На десерт, использую у себя:

Code

#include <a_samp>

stock Bit:operator+(Bit:val1, Bit:val2)
{
  return val1 | val2;
}

stock Bit:operator-(Bit:val1, Bit:val2)
{
  return val1 & ~val2;
}

stock bool:operator==(Bit:val1, Bit:val2)
{
  return (val1 & val2);
}

stock bool:operator!=(Bit:val1, Bit:val2)
{
  return !(val1 & val2);
}

enum Bit ( <<=1 )
{
  NONE,
  ONE = 1,
  TWO,
  THREE,
}

public OnFilterScriptInit()
{
  new Bit:data = NONE;
   
  data = data + TWO;
  data = data + THREE;
   
  data = data - THREE;
   
  if(data == TWO || data == THREE)
   printf("%b", _:data);
  // --
  // --
  data = NONE;
   
  data += TWO;
  data += THREE;
   
  data -= THREE;
   
  if(data == TWO || data == THREE)
   printf("%b", _:data);
   
  return 1;
}

И все же тэги в павн пригаждаюца ;)


Сообщение отредактировал Romanius - Четверг, 05.05.2011, 13:21
toneysixДата: Четверг, 05.05.2011, 13:25 | Сообщение # 30
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Romanius где это тема была раньше, ну в принципе как и догадывался. Тэги безусловно в конкретных случаях бывают полезными, например для создания своего псевдо-типа, который выполняет определенную функцию в макросе.
P.S: Не хватает тэга bool у тебя в возврате:
stock bool:operator==(Bit:val1, Bit:val2) return bool: (val1 & val2);
Иначе будет несовпадение, ну и в конце enum запятая не ставится.
В целом мне твоя универсальность понравилась, и сама реализация в виде перезагрузки операторов, я почему-то думал, что такое невозможно в павн, а оказыцца моно)



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Четверг, 05.05.2011, 20:02
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua