19.09.2011, 00:58
(
Last edited by Shelby; 28/04/2012 at 03:37 AM.
)
Sumбrio:
...• Oque й rBits?
...• Porque usar rBits?
...• Como usar rBits?
...• Poupando memуria:
...• Quais sгo os limites?
...• Onde posso encontrar rBits?
...• Quem desenvolveu rBits?
...• Agradecimentos.
O que й rBits?
rBits й uma forma pratica e fбcil de manipular bits nas arrays.
Porque usar rBits?
Usando-a corretamente vocк irб economizar muita memуria!
Muita gente utiliza arrays de 32bits( as famosas new array[tamanho]; ) que podem armazenar valores atй 2147483647, quando sу precisam armazenar valores de 0 e 1.
Com rBits vocк pode criar uma array que armazena apenas os valores que vocк precisa( Assim, poupando memуria ).
Como usar rBits?
Para declarar uma bit array vocк apenas deve criar uma array com o nome Bit e em seguida o seu tipo ( 16, 8, 4, 2 ou 1 ) e o tamanho entre '<' e '>'.
Para definir um valor а essa array apenas use Bit seguida de seu tipo e entгo adicione '_Set'. Usando nosso exemplo, uma array 16-bit ficaria:
Para obter o valor й muito similar, vocк apenas troca o '_Set' para '_Get'.
Poupando memуria:
Aqui estб o que eu quero dizer com a poupanзa de memуria. Veja esse exemplo ( note que isto й apenas um exemplo ):
Muitas pessoas escrevem seus cуdigos desse jeito.
O tamanho do arquivo .amx й de 726 bytes. Estamos usando arrays 32-bits neste exemplo quando nуs precisamos apenas armazenar valores entre 0 e 1. Sendo que poderнamos usar arrays de 1-bit:
Agora o tamanho do arquivo .amx й de 473 bytes. Nгo й muita coisa aqui, mas imagine em um script grande com muitas arrays!
Aqui, outro exemplo (Um exemplo meio bobo, mas nгo consegui pensar em outro.):
Vamos dizer que o valor mбximo que o nosso veнculo pode ter й 65535 e estamos usando arrays de 32-bits:
O tamanho do arquivo compilado seria 2.12 kB.
Agora, vamos usar arrays de 16-bits ( porque sу precisamos armazenar valores atй no mбximo 65535 ):
O tamanho agora й somente 1.37 kB.
Quais sгo os limites?
Atenзгo:
" " = Significa que vocк pode usar valores entre 0 e 1. Caso vocк adicionar um valor mais alto ele irб repetir sempre entre 1 e 0.
Onde posso encontrar rBits?
https://sampforum.blast.hk/showthread.php?tid=275142
Quem desenvolveu rBits?
Ryder`
Agradecimentos:
Agradecimentos a Ryder` por disponibilizar em seu tуpico cуdigos para o uso neste tutorial.
...• Oque й rBits?
...• Porque usar rBits?
...• Como usar rBits?
...• Poupando memуria:
...• Quais sгo os limites?
...• Onde posso encontrar rBits?
...• Quem desenvolveu rBits?
...• Agradecimentos.
O que й rBits?
rBits й uma forma pratica e fбcil de manipular bits nas arrays.
Porque usar rBits?
Usando-a corretamente vocк irб economizar muita memуria!
Muita gente utiliza arrays de 32bits( as famosas new array[tamanho]; ) que podem armazenar valores atй 2147483647, quando sу precisam armazenar valores de 0 e 1.
Com rBits vocк pode criar uma array que armazena apenas os valores que vocк precisa( Assim, poupando memуria ).
Como usar rBits?
Para declarar uma bit array vocк apenas deve criar uma array com o nome Bit e em seguida o seu tipo ( 16, 8, 4, 2 ou 1 ) e o tamanho entre '<' e '>'.
pawn Code:
new Bit16: MinhaArray <5>;
pawn Code:
Bit16_Set(bitArr[], arrIdx, value);
// ...
Bit16(MinhaArray, 1, 250);
pawn Code:
Bit16_Get(bitArr, arrIdx);
// ...
Bit16_Get(MinhaArray, 1);
Aqui estб o que eu quero dizer com a poupanзa de memуria. Veja esse exemplo ( note que isto й apenas um exemplo ):
Muitas pessoas escrevem seus cуdigos desse jeito.
pawn Code:
#include <a_samp>
new
bool: g_PlayerSpawned[MAX_PLAYERS]
;
public OnPlayerSpawn(playerid)
{
g_PlayerSpawned[playerid] = true;
return 1;
}
public OnPlayerDeath(playerid)
{
g_PlayerSpawned[playerid] = false;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
g_PlayerSpawned[playerid] = false;
return 1;
}
stock IsPlayerSpawned(playerid)
return g_PlayerSpawned[playerid];
pawn Code:
#include <a_samp>
#include <rBits>
new
Bit1: g_PlayerSpawned <MAX_PLAYERS>
;
public OnPlayerSpawn(playerid)
{
Bit1_Set(g_PlayerSpawned, playerid, true);
return 1;
}
public OnPlayerDeath(playerid)
{
Bit1_Set(g_PlayerSpawned, playerid, false);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
Bit1_Set(g_PlayerSpawned, playerid, false);
return 1;
}
stock IsPlayerSpawned(playerid)
return Bit1_Get(g_PlayerSpawned, playerid);
Aqui, outro exemplo (Um exemplo meio bobo, mas nгo consegui pensar em outro.):
Vamos dizer que o valor mбximo que o nosso veнculo pode ter й 65535 e estamos usando arrays de 32-bits:
pawn Code:
#include <a_samp>
new
g_VehiclePrice[MAX_VEHICLES]
;
public OnVehicleSpawn(vehicleid)
{
g_VehiclePrice[vehicleid] = random(65535); // Vamos dizer que o valor mбximo permitido seria 65535.
return 1;
}
Agora, vamos usar arrays de 16-bits ( porque sу precisamos armazenar valores atй no mбximo 65535 ):
pawn Code:
#include <a_samp>
#include <rBits>
new
Bit16: g_VehiclePrice <MAX_VEHICLES>
;
public OnVehicleSpawn(vehicleid)
{
Bit16_Set(g_VehiclePrice, vehicleid, random(65535));
return 1;
}
Quais sгo os limites?
Nome da array | Valor mбximo armazenбvel (limite) |
arrays de 1-bit | Limitado a valores atй 1 (0x1). " " |
arrays de 2-bit | Limitado a valores atй 3 (0x3). " " |
arrays de 4-bit (nibble arrays) | Limitado a valores atй 15 (0xF). " " |
arrays de 8-bit (tambйm conhecidas como char arrays no PAWN) | Limitado a valores atй 255 (0xFF). " " |
arrays de 16-bit | Limitado a valores atй 65535 (0xFFFF). " " |
arrays de 32-bit | Utilize as arrays comuns. |
" " = Significa que vocк pode usar valores entre 0 e 1. Caso vocк adicionar um valor mais alto ele irб repetir sempre entre 1 e 0.
Onde posso encontrar rBits?
https://sampforum.blast.hk/showthread.php?tid=275142
Quem desenvolveu rBits?
Ryder`
Agradecimentos:
Agradecimentos a Ryder` por disponibilizar em seu tуpico cуdigos para o uso neste tutorial.