estrapolare un bit da una variabbile

Scripts e snippets scritti in GameMaker Language (gml)
Rispondi
Mine_ale3
Newbie
Messaggi: 10
Iscritto il: 10/09/2015, 19:40
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

estrapolare un bit da una variabbile

Messaggio 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]
Ultima modifica di Mine_ale3 il 02/11/2015, 20:22, modificato 1 volta in totale.

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: estrapolare un bit da una variabbile

Messaggio da Nix »

Capolavoro.

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: estrapolare un bit da una variabbile

Messaggio da Tizzio »

Molto utile, complimenti.

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: estrapolare un bit da una variabbile

Messaggio da doom13 »

Ma quel variabbbile con tre b è stato modificato da qualcuno?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Arcade Blues
Newbie
Messaggi: 47
Iscritto il: 09/01/2016, 12:05
Specialità: Sogno a occhi aperti
Uso: GM:Studio 1.4 Master
Località: Napoli
Contatta:

Re: estrapolare un bit da una variabbile

Messaggio 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");

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti