 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Битовое хранение данных (флагов)
| |
| 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 и никто не запрещает делать так : 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 |
| |
|
|
|
 |
|
 | |
| |
|