09/10/08 |
Come ho promesso nello scorso post, vi propongo la soluzione dell'esercizi che ho "autoconcepito" per verificare se ho capito appieno come Java tratta i vari operatori e quanti operatori mette a disposizione.
Mettere la sola soluzione secondo me è poco interessante: molto più stimolante è capire per quali tortuosi percorsi mentali sono arrivato a questo tipo di problemi. In questo modo avete anche il tempo di rileggere l'esercizio senza vedere prima la soluzione... Il primo passo è stato la simulazione di un compitino di una prova in itinere per l'esame di Programmazione (la potete trovare qui). Le prove in itinere sono una specie di compiti in classe, diluiti seguendo la durata del corso, mirati a provare la preparazione degli studenti limitatamente agli argomenti trattati nellle lezioni precedenti l'ultima prova o l'inizio del corso. Un modo per evitare la "congestione" da studio di tante cose e concetti diversi. Sono riuscito a fare i compitini in modo decente, però non troppo agilmente. E' anche vero che solo recentemente mi son messo a scrivere programmi Java, e nessuno particolarmente complesso. Meglio quindi approfondire, mi son detto. Ho prontamente scaricato la Bibbia di Java, The Java Language Specification, Third Edition, una pubblicazione che sconsiglio ai deboli di cuore, visto che è indirizzata a chi scrive compilatori od interpreti di questo linguaggio, insomma gente che conosce già tutto e vuole sapere soprattutto le minuzie. Io non sono debole di cuore, considerato che negli ultimi dodici anni ho convissuto con documenti tipo questo, che farebbe addormentare un caffeinomane. Certo però che bisogna aver pazienza. Qui ho scoperto diverse cose nuove. Da buon informatico, spesso scarico programmi fatti da terzi, che si suppongono esperti del settore, per vedere in che modo quella certa cosa si usa, o come si risolvono certe problematiche comuni. Quindi ne vedo di cotte e di crude. Certo però che l'operatore >>> mi mancava proprio. Non ho mai visto un programma Java che lo usasse, e nemmeno un libro di testo che lo spiegasse! E ne ho visti diversi ;), compresa la mitica bibbia in due volumi Core Java. Quindi per vedere bene se avevo capito bene cosa facesse il mitico operatore >>> ho ovviamente scritto un programmino, poi giusto perché ci prendevo gusto, mi sono divertito a fare l'esempio criptico dell'esercizio:
int tortureTest; In breve: la risposta corretta è 32. L'operazione viene effettuata in questo ordine: (-2<<(8-a*b+16%4))>>>27. L'operatore >>> è analogo all'operatore >> ma include nello shift (questo post è solo per programmatori, sorry) anche il bit di segno. Non serve a niente, praticamente, ma per un informatico le nozioni più inutili sono quelle più ambite! |