Pagina 1 di 1

estrapolare un bit da una variabbile

Inviato: 01/11/2015, 19:31
da Mine_ale3
Questo script estrapola un singolo bit da una variabile

Codice: Seleziona tutto

//argument0 variabbile da cui estrapolare il bit argument1 il bit da estrapolare
var a b c d e;e=0
while e>64 {i[e]=0 e+=1}
b=1 d=1 a=argument0
while a<>0{
    while (b<a) {b*=2 d+=1}
    a-=b/2 c[d-1]=1 b=1 d=1}
return c[argument1]

Re: estrapolare un bit da una variabbile

Inviato: 01/11/2015, 21:09
da Nix
Capolavoro.

Re: estrapolare un bit da una variabbile

Inviato: 01/11/2015, 21:09
da Tizzio
Molto utile, complimenti.

Re: estrapolare un bit da una variabbile

Inviato: 01/11/2015, 21:28
da doom13
Ma quel variabbbile con tre b è stato modificato da qualcuno?

Re: estrapolare un bit da una variabbile

Inviato: 09/01/2016, 16:24
da Arcade Blues
l'implementazione è abbastanza convoluta e poco chiara ad esempio non capisco la generazione continua del' array nella variabile i creata in ogni instanza da cui la funzione è chiamata.
Oltretutto tale array non viene attualmente utilizzato nel resto del codice.

Non so sulle vecchie versioni, ma su Game Maker Studio sono disponibili le operazioni bitwise per le operazioni sui bit.
A differenza del tuo metodo il valore double viene convertito int 32bit quindi con 32 posizioni invece di 64, ma decisamente più pratico da usare per svariate esigenze es io lo uso per le flag e per impacchettare spacchettare multipli valori da 3 o 4 bit assieme.

La funzione bitwise equivalente a quella che proponi sarebbe (dato che non l'ho testata):

Codice: Seleziona tutto

return (argument0 >> argument1) & 1; //che ritorna 0 o 1 nel caso il bit di argument0 nella posizione argument1 sia settato;
per fare un check di una flag invece si puo' usare semplicemente & eseguibile su bit singolo o bit multipli se si vuole testare piu' flag contemporaneamente.

Codice: Seleziona tutto

var flags_da_testare = 1<<3 | 1<<6 | 1<<7; //costante 1100100 di esempio equivalente a 3 flags che vuoi testare siano settate in una variabile.
if((variabile_flags & flags_da_testare) == flags_da_testare) show_message("ok");
else  show_message("una  o piu flag non erano settate");