Homepage  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


.dsy:it. .dsy:it. Archive > Community > Tech
 
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

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate