[Include] Bits Booleanos - O que sгo bits?
#1

Bits Booleanos


Sem nada para fazer agora pela manhг resolvi criar um simples sistema de bits 1 e 0. Isto pode poupar sua memуria e amx em atй 32 vezes.

Qual melhora?
lvdm.amx sem BITS -> 4 mb
lvdm.amx com BITS -> 177kb


Cуdigo usado:
pawn Код:
// com bits
new Bit:arr<5000000>;

// sem bits
new arr[5000000]
Sу usa-se para arrays de true e false !!

Pode deixar a execuзгo mais lenta. Isto й obvio e ocorre em qualquer sistema de bits, mas nгo muito. A propуsito, este meu atй que ficou rбpido.

O que sгo bits? Como tiveram estб ideia genial?

Primeiramente, vou explicar como funciona manipulaзгo de alocaзгo por Bits
Primeiramente, vocк deve saber que "Bits nada mais nada menos sгo "Binary Digits" ou "Digitos Binбrios"."

-

Atualmente no pawn, podemos ter o seguinte valor mбximo em uma variбvel

pawn Код:
new var = cellmax;
Cellmax й o mбximo valor que se pode ter em uma array/variбvel. Caso vocк tente

pawn Код:
new var = cellmax + 1;
Nгo darб certo! Isto retorna em notaзгo cientifica pois pawn nгo tem suporte para nъmeros maiores que cellmax

Pois bem, o valor 2147483647 ou cellmax equivale ao seguinte em binбrio:
Quote:

1111111111111111111111111111111

(digitos binбrios sгo 1 e 0. APENAS)

Entгo foi aн, que alguйm teve a idйia criativa de usar estes valores como uma array true e false

pawn Код:
new ab = 0b001
Em bits booleanos. Isto equivale a:
pawn Код:
new ab[3];
ab[0] = 0;
ab[1] = 0;
ab[2] = 1;
Note: 001 e 001

ou outro exemplo:
pawn Код:
new ab[3];
ab[0] = 1;
ab[1] = 0;
ab[2] = 1;

// equivale a "new ab = 0b101"
// "0b" indica que o nъmero й binбrio
Note 0b101

Logo. Uma ъnica variбvel pode receber
pawn Код:
1111111111111111111111111111111
ou 32 elementos em valor 1 conforme o nъmero acima ou valor 0 ..

Sendo assim vocк nгo precisarб de uma array de [32] partes. Mas sim apenas uma array de [1] parte. Viu a memуria poupada?

Pois bem, existem varias formas de manipulaзгo destes valores. Desde usar strings para manipular ou atй mesmo cбlculos (que й o mais aconselhбvel)

Include

PHP код:
#define Bit_Lenght(%0) \
            
(sizeof(%0) * cellbits)
            
#define Bit:%0<%1> \
            
%0[(%+cellbits) / cellbits]
        
stock Bit_Get(bit[], possize sizeof bit) {
    new
        
index = (pos) / cellbits
    
;
     return 
index size || index false : (!= (bit[index] & (<< pos))) ;
}
stock Bit_Set(bit[], posbool:valsize sizeof bit) {
    new
        
index = (pos) / cellbits
    
;
    return 
index size || index : (bit[index] = val ?(bit[index] | 1) << pos bit[index] & ~(<< pos)), 1;

Pastebin: http://pastebin.com/S4DbCEAL


Modo de uso e comparaзгo
pawn Код:
new Bit:bites<MAX_PLAYERS>;
   
    printf("%d", Bit_Lenght(bites));
   
    Bit_Set(bites, 499, true);
   
    for(new i = Bit_Lenght(bites)-1 ; i > -1; i--) {
        if(Bit_Get(bites, i)) {
            printf("%d -> true", i);
        }
    }
Isto deverб imprimir
499 -> true

Pois й o valor que usamos em set. O uso й simples:

Comparaзгo:

Array normal: new var[32];
Array bit: new Bit:var<32>; // var[1]
Memуria poupada em 32x

Colocando valor
Mйtodo normal-> var[499] = true;
Mйtodo Bits - > Bit_Set(var, 499, true);

Pegando valor
printf("metodo normal %d", var[499]);
printf("metodo bits %d", Bit_Get(var, 499));

-
-
-

Й isto. Espero que tenham gostado

Criado por Bruno da Silva
Reply


Messages In This Thread
Bits Booleanos - O que sгo bits? - by ipsBruno - 26.06.2012, 15:15
Re: Bits Booleanos - O que sгo bits? - by Ades - 26.06.2012, 15:16
Re: Bits Booleanos - O que sгo bits? - by Truck - 26.06.2012, 15:17
Re: Bits Booleanos - O que sгo bits? - by ipsBruno - 26.06.2012, 15:18
Re: Bits Booleanos - O que sгo bits? - by Edu33 - 26.06.2012, 15:22
Re: Bits Booleanos - O que sгo bits? - by paulor - 26.06.2012, 15:26
Re: Bits Booleanos - O que sгo bits? - by .FuneraL. - 26.06.2012, 15:26
Re: Bits Booleanos - O que sгo bits? - by Crueliz0n - 26.06.2012, 15:29
Re: Bits Booleanos - O que sгo bits? - by Abravanel - 26.06.2012, 15:36
Re: Bits Booleanos - O que sгo bits? - by ipsBruno - 26.06.2012, 15:39

Forum Jump:


Users browsing this thread: 1 Guest(s)