devo convertire questa sintassi fatta in c++ in GML
Codice: Seleziona tutto
rem=AA%2;
Codice: Seleziona tutto
rem=AA%2;
Ma in pratica cosa significa quella percentuale, posso scriverla in modo diverso?Xeryan ha scritto:Non dovrebbe uscirti nessun errore
testato con:Codice: Seleziona tutto
AA=5 rem=AA%2;
CaptainOlon ha scritto:Il simbolo di percentuale è il modulo, ovvero il resto della divisione tra i due operandi.
Esempio: 5%2 = 1 (2 col resto di 1)
Puoi scrivere anche mod.
doom13 ha scritto:rem = AA mod 2;
Codice: Seleziona tutto
#include <iostream>
using namespace std;
int main()
{
signed long long dec,rem,i=1,sum=0;
cout<<"Enter the decimal to be converted:";
cin>>dec;
do
{
rem=dec%2;
sum=sum + (i*rem);
dec=dec/2;
i=i*10;
}while(dec>0);
cout<<"The binary of the given number is:"<<sum<<endl;
cin.get();
cin.get();
return 0;
}
Codice: Seleziona tutto
var dec;
var rem;
var i = 1;
var sum = 0;
dec = get_integer("Enter the decimal to be converted:", 0);
do
{
rem = dec mod 2;
sum = sum + (i * rem);
dec = dec / 2;
i = i * 10;
} until (dec <= 0);
show_message("The binary of the given number is: " +string(sum));
Ecco queste sono le classiche spiegazioni "alla Breston"Breston ha scritto:Un minimo di spiegazione non guasterebbe..
Queste sono le basi per capire quel codice:Lo script ripete queste due istruzioni per ogni bit.
- Un numero in formato digitale binario è rappresentato da bit (1 o 0), nello specifico il formato intero a 32 bit contiene.. 32 bit in questo modo: [latex]n = \sum_{i = 0}^{31}b_i \cdot 2^i[/latex] dove [latex]b_i[/latex] è il bit in posizione i-esima (il primo 0, l'ultimo 31). Se si immagina che il bit in posizione 0 sia quello più a destra, il numero 1001 (omettendo i primi 28 zeri, allo stesso modo in cui si omettono gli zeri prima di un numero decimale) è 1*2^0 + 1*2^3 = 1 + 8 = 9. Giusto per far discussione, se la formula ti sembra estranea sappi che la stai già usando inconsapevolmente. Il peso di ogni cifra binaria è [latex]2^p[/latex], dove p è la posizione e 2 la base, cioè il numero di simboli utilizzabili (1 o 0 è 2). Il sistema decimale è uguale. Un numero con m cifre si calcola come [latex]n = \sum_{i=0}^{m}c_i \cdot 10^i[/latex], 193 = 3 * 1 + 9 * 10 + 1 * 100.
- L'operatore modulo a mod b oppure, in C++, a % b, restituisce il resto della divisione intera di a per b. Detto terra terra: 2 sta 5 volte in 11 con resto di 1, allora 11 % 2 = 1.
a % 2 è un indice di parità di a, se il risultato è 0 a è pari, se il risultato è 1 a è dispari. In questo caso l'interesse nella parità di a risiede nel fatto che, se a è dispari, allora il primo bit (quello meno significativo, anche chiamato least significant bit LSB) è 1, altrimenti 0. Questo si può dimostrare facilmente: se si esclude il primo bit, il numero binario è composto da una somma di quantità che sono tutte pari, in quanto nella forma di 2^n con n > 0. L'unico bit che discrimina sulla disparità del numero è quindi il primo, che rappresenta la presenza o meno di un 1 nella somma.
a % 2 restituisce quindi il LSB di a. Sarebbe meglio fare a & 1 per ottenere il primo bit..- Sempre immaginando che il LSB sia quello più a destra, la divisione per 2 ha l'effetto di traslare tutti i bit a destra di 1, perdendo il LSB (il nuovo LSB è quello che prima della traslazione stava in posizione 1). All'estrema sinistra ovviamente entra uno 0. Anche qui, la dimostrazione è semplice: [latex]\frac{\sum_{i=0}^{m}b_i\cdot 2^i}{2} = \sum_{i=0}^{m}b_i \cdot 2^{i-1}[/latex], cioè il bit i-esimo ha il peso di quello a destra. Per capirci, se si divide un numero decimale per 10 si ha lo stesso effetto, traslando a destra le cifre. Anche in questo caso sarebbe da preferire un'istruzione diversa: a >> 1 invece di a /= 2, in quanto più esplicita.
Ottieni il bit LSB
Trasla a destra di 1
Mi sono allontanato involontariamente perché ho passato un brutto periodo (mi sono laureato)..CaptainOlon ha scritto:Come mi mancavano le spiegazioni di Breston
No vabbé dicevo così, se avrai del tempo da perdere sennò fa niente.Breston ha scritto:Insomma.. Ora che ho finito il trasloco forse sì, ma neanche tanto coi miei nuovo ritmi
Visitano il forum: Nessuno e 42 ospiti