Bits Booleanos - O que sгo bits? -
ipsBruno - 26.06.2012
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
Cellmax й o mбximo valor que se pode ter em uma array/variбvel. Caso vocк tente
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
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 0b
101
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[(%1 +cellbits) / cellbits]
stock Bit_Get(bit[], pos, size = sizeof bit) {
new
index = (pos) / cellbits
;
return index > size || index < 0 ? false : (0 != (bit[index] & (1 << pos))) ;
}
stock Bit_Set(bit[], pos, bool:val, size = sizeof bit) {
new
index = (pos) / cellbits
;
return index > size || index < 0 ? 0 : (bit[index] = val ?(bit[index] | 1) << pos : bit[index] & ~(1 << 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
Re: Bits Booleanos - O que sгo bits? -
Ades - 26.06.2012
First
Vo ler tуpico e dou edit -q
@EDIT
Legal ,mas qual й a funзгo disso ?
Re: Bits Booleanos - O que sгo bits? -
Truck - 26.06.2012
FistІ
two.
Edito Jб jб vou ver o tutorial.
@Edit:
Gostei, vai ajudar muita gente, apesar de eu nгo entender muito bom, mas parabйns pelo Tutorial.
Re: Bits Booleanos - O que sгo bits? -
ipsBruno - 26.06.2012
Quote:
Originally Posted by Ades
First
Vo ler tуpico e dou edit -q
|
Ri.
Quote:
Originally Posted by Truck
FistІ two.
Edito Jб jб vou ver o tutorial.
|
Ri ++;
-
-
-
Importante:
Bits existem em vбrias linguagens. Mas aconselha-se o uso em Pawn pois pawn sу aceita variбveis de 32 e arrays de 8, char/32
Tambйm pode usar "format" para manipular bits. Proponho atй um desafio para quem consiga, й bastante fбcil.
Ex
#define getBitStr(%0,%1) %0[(%1 + cellbits)/ 32][%1]
#define setBitStr(%0,%1,%2) %0[(%1 + cellbits)/ 32][%1] = !!%2
Й similar, a lуgica й a mesma o problema й que vai ocupar as arrays do mesmo jeito, pois cada caractere tem sua prуpria parte dentro da array striing
Re: Bits Booleanos - O que sгo bits? -
Edu33 - 26.06.2012
/\ Que nubisses desses ae.
@Topic
Boa include.
Re: Bits Booleanos - O que sгo bits? -
paulor - 26.06.2012
hum... Vou testar e vou ver se realmente ha diferenзa, pois nгo sou muito chegado a bytes e nгo conheзo muito isso ae!
@LoL
Nгo entendi esse desafio!
Re: Bits Booleanos - O que sгo bits? -
.FuneraL. - 26.06.2012
Parabйns DraKins, mas uma vez , belo trabalho
Re: Bits Booleanos - O que sгo bits? -
Crueliz0n - 26.06.2012
#off
o que seria de um processador sem os bits
![afro](images/smilies/mrgreen.gif)
#topic
gostei man, vai ajudar muita gente
Re: Bits Booleanos - O que sгo bits? -
Abravanel - 26.06.2012
hmm, bela explicaзгo.
Re: Bits Booleanos - O que sгo bits? -
ipsBruno - 26.06.2012
A explicaзгo mais simples й:
Em bits, um nъmero й visto como uma array, onde cada digito do nъmero em binбrio equivale a uma determinada parte da array.