 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
io *odio* il C Clicca QUI per vedere il messaggio nel forum |
cato |
Manipolazione di bit
percchazzo non funziona?
cioe la versione da sfigato con somme e prodotti va, quella + geek con gli shift no...
code:
/* converto da 8 -> 32 bit */
//dummy=dummy|RX_buffer[3];
//dummy<<8;
dummy=(dummy+RX_buffer[3])*256;
//dummy=dummy|RX_buffer[2];
//dummy<<8;
dummy=(dummy+RX_buffer[2])*256;
//dummy=dummy|RX_buffer[1];
//dummy<<8;
dummy=(dummy+RX_buffer[1])*256;
//dummy=dummy|RX_buffer[0];
dummy=dummy+RX_buffer[0];
fprintf(stdout, "%x \n", dummy);
dove dummy è un 32bit e gli elementi di RX_buffer da 8bit...
grrr non capisco
code:
#include <stdio.h>
unsigned long i=0;
int main(int argc,char *argv[])
{
i=1;
printf("%x-->",i);
i<<8;
printf("%x",i);
}
in questo esempio stupido al posto di ottenere 100 ottengo un laconico 1-->1 |
DeepBlue |
dummy<<8;
i<<8;
Non assegni il valore dei risultati.
Prova con i = i<<8 o con dummy = dummy << 8;
:) |
cato |
code:
#include <stdio.h>
unsigned long i=0;
int main(int argc,char *argv[])
{
i=1;
printf("%x-->",i);
i=i<<8;
printf("%x",i);
}
ma vaff...
che linguaggio di merda |
jdhoring |
Prova con un espediente banale:
invece di i<<8 scrivi i=i<<8
Riposta se non funza.
[EDIT] alla mia età i riflessi sono + lenti.... cmq il C è un linguaggio stupendo, basta solo usarlo con la testa (= non usare le abbreviazioni... non dimentichiamo che i sorgenti servono a chi li legge per capirli...) |
cato |
anzi uso <<= che fa figo |
DeepBlue |
Originally posted by cato
ma vaff...
che linguaggio di merda
Sento le urla di Kernighan e di Ritchie... Stanno venendo a prenderti... :asd: |
CLod |
usa assembly che è meglio :asd: |
cato |
Originally posted by DeepBlue
Non assegni il valore dei risultati.
Prova con i = i<<8 o con dummy = dummy << 8;
:)
:pc: :swear: :pccrash:
ma ca##o mette un warning pareva brutto?
sto iniziando ad apprezzare ADA :look: |
jdhoring |
Originally posted by cato
anzi uso <<= che fa figo
eccolo... manco avevo finito di scriverlo.. |
recoil |
il problema a volte è proprio del compilatore che rompe le balle con warning sulle conversioni implicite (magari sui puntatori) e poi si dimentica di segnarlare errori come quello o la mancanza del doppio == nelle if e nei cicli, errore che ogni tanto si commette
però il linguaggio è bello |
DeepBlue |
Originally posted by cato
:pc: :swear: :pccrash:
ma ca##o mette un warning pareva brutto?
Se vuoi farti scassare le palle per ogni puntino sulle i, usa nelle opzioni di compilazione " -Wall ", che attiva TUTTI i warning.
Nel tuo caso ti avrebbe detto: "test.c:7: warning: statement with no effect"
Se vuoi sapere qual è il warning esatto che fa questa cosa, spulcia la man, a memoria non lo ricordo :) |
jdhoring |
Originally posted by recoil
il problema a volte è proprio del compilatore che rompe le balle con warning sulle conversioni implicite (magari sui puntatori)
KUT
e fa pure bene.... sennò il cast a cosa serve? |
recoil |
Originally posted by jdhoring
e fa pure bene.... sennò il cast a cosa serve?
si certo
ma capita magari di avere un puntatore void e di assegnargli un puntatore a una long word.
il warning c'è ma il programma funziona lo stesso
però ti segnala una cosa del genere (e fa bene) quando manca altre segnalazioni più critiche tipo quella che ho esposto prima. perché non mettono più warnings? |
DeepBlue |
Beh un warning su un cast implicito è sicuramente più utile che uno su un'operazione che non ha effetto.
Anche perché il cast potresti essertelo dimenticato e con i puntatori si rischia sempre di fare casino.
Off-Topic: sempre a riguardo di casting, se fate una ricerca su it.comp.lang.c troverete un sacco di gente che si incazza a morte quando fate il casting sulle malloc... mi ha sempre divertito questa cosa, soprattutto perché in uni ci tenevano parecchio al casting sulle malloc, anche se di fatto non è strettamente necessario |
recoil |
Originally posted by DeepBlue
Beh un warning su un cast implicito è sicuramente più utile che uno su un'operazione che non ha effetto.
e la if o il ciclo?
uno mette = al posto di == ed è fregato, magari perde un sacco di tempo a capire come mai
Off-Topic: sempre a riguardo di casting, se fate una ricerca su it.comp.lang.c troverete un sacco di gente che si incazza a morte quando fate il casting sulle malloc... mi ha sempre divertito questa cosa, soprattutto perché in uni ci tenevano parecchio al casting sulle malloc, anche se di fatto non è strettamente necessario
si ho notato che ci sono delle guerre in quel newsgroup sul casting e anche su altri argomenti.
poi ci sono i puristi dell'ANSI C che ti uccidono se fai qualcosa che non è standard :D |
jdhoring |
Perchè i programmatori giovani non li vogliono... per loro, se compila, allora funziona.... |
DeepBlue |
Originally posted by recoil
poi ci sono i puristi dell'ANSI C che ti uccidono se fai qualcosa che non è standard :D
Eh sì, perché nel manifesto c'è scritto che il ng tratta solo ANSI C.
Infatti spesso ti redirigono su gruppi come it.comp.programmare.win32 e su it.comp.os.linux.development. |
yeah |
uno mette = al posto di == ed è fregato, magari perde un sacco di tempo a capire come mai
Uno dei problemi più divertenti :)
cmq gcc avvisa: " warning: suggest parentheses around assignment used as truth value" ;)
Il massimo secondo me sono i puntatori a puntatori (o puntatori a puntatori a puntatori...) :crazy:
So non ti piace il C passa a VB, oppure a Pascal :asd:
|
DeepBlue |
Originally posted by yeah
piace il C passa a VB, oppure a Pascal :asd:
Nooo il pascal??? perché?? è tanto carino!
Al massimo se non ti piace il C e non vuoi passare a VB, passa a Java....:asd: |
UZI |
Originally posted by DeepBlue
Nooo il pascal??? perché?? è tanto carino!
Al massimo se non ti piace il C e non vuoi passare a VB, passa a Java....:asd:
ma và!!! voi tutti siete indietro come scimmie da laboratorio!!! il linguaggio di programmazione definitivo è SQUEAK (chi ha fatto etl sà di cosa parlo) :asd: !!! |
Napolux |
Originally posted by cato
ma vaff...
che linguaggio di merda
Toglietemi tutto ma non il mio C...
UE' IO ADORO IL C.
A volte faccio sogni erotici con il manuale K&R :D |
cato |
per la serie io *odio* il C
perche' deve inizializzare le variabili a caso??
code:
void from_raw (unsigned_8 *Buffer, unsigned_32 *Message)
{
int index;
/* converto da 8 -> 32 bit */
memset(Message,0,127);
for(index=0;index<128;index++)
{
M essage[index]=Message[index]|Buffer[4*index+3];
Message[index]<<=8;
Message[index]=Message[index]|Buffer[4*index+2];
Message[index]<<=8;
Message[index]=Message[index]|Buffer[4*index+1];
Message[index]<<=8;
Message[index]=Message[index]|Buffer[4*index];
printf(" %x\n",Message[index]);
}
}
e mi chiedevo ma perchediamine funziona perfettamente fino alla 31 word e poi va tutto a remengo?
risposta dopo un ora...
memset funziona a byte e non a word :grr: :grr: |
jdhoring |
Perchè è meglio inizializzare a caso che a cazzo (Icome fa il COBOL ad esempio)... almeno il fatto che te le devi inizializzare tu e sempre è chiaro e limpido... |
yeah |
perche' deve inizializzare le variabili a caso??
Non afferro. Devi inizializzare solo le variabili il cui primo utilizzo non è un assegnamento.
code: memset(Message,0,127);
Penso tu stia saltando un byte, visto che nel for() ne usi 128 |
UZI |
il C sta ad un programmatore come il bushido sta ad un samurai |
|
|
|
|