Salve a tutti, perdonate la mia ignoranza ma sono un neofita.
Leggendo lo sketch di un progetto arduino mi ritrovo questa stringa
digitalWrite (DIR2, ~val < 1);
quello che non mi è chiaro è la seconda parte, ovvero ~val <1.
Io ho letto finora che quel valore può essere imppostato come HIGH o LOW, potreste illuminarmi?
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Mi aspetto che venga, prima di tutto, rispettato il REGOLAMENTO ... incluso il racchiudere il codice nei tag CODE ! Grazie a tutti per la collaborazione.
Come si era già detto in uno dei messaggi cancellati da Guglielmo, la tilde inverte il risultato della disequazione.
Se val è minore di 1, "val<1" è vero, quindi la disequazione vale 1.
Credo, però, che servano delle parentesi:
In quale sketch hai trovato questa "perla di leggibilità"?
~ è l'operatore di negazione bit a bit (complemento a uno), ovvero inverte tutti i bit. La cosa è apparentemente poco utile, ma equivale a fare 255 - val (se val è un byte, ecc ecc).
@Datman: Ti sbagli, quello che dici tu è l'operatore di negazione LOGICA, ovvero "!". Questo è l'operatore di negazione BIT A BIT (bitwise).
Occhio che se è veramente scritto come ha scritto l'OP "~val < 1", per la precedenza degli operatori, viene prima fatto il NOTdi ogni singolo bit di val, dopo di che viene fatto il confronto con 1 e, se val vale meno di 1 il risulato è TRUE altrimenti è FALSE.
Quello che occorre sapere è ... come è definito val (signed o unsigned) e cosa contiene quando si arriva li ...
Forse non dobbiamo dare per scontato che tutto ciò che è scritto in quel "progetto Arduino" sia corretto!
Purtroppo, neanche Google è stato capace di trovare quella "cosa" in tutto l'Internet mondiale!
Il problema è che una variabile booleana non è rappresentata su un singolo bit in C, ma su un intero byte, per cui ~1 = 254, che è sempre TRUE. Per questo bisogna sempre usare la negazione logica con le variabili booleane. La negazione bitwise ha senso in pochi contesti.
SukkoPera:
Se val vale 0, la disequazione "val < 1" è vera", ma la disequazione "~val < 1" è falsa, perché ~val vale 255.
Questo è concettualmente diverso da dire !(val < 1), per quanto sembri simile in questo caso.
Comunque scrivere una riga del genere è una schifezza.
Mai stato così d'accordo.
Che io sappia, la programmazione viene usata per SEMPLIFICARE tutte le cose che altrimenti sarebbero complicate: usare quell'obbrorio significa complicare cose che sarebbero semplici in altri modi...
**>Datman: **NO, dipende dall'implementazione del tipo "boolean" (più corretto "bool") in Arduino ...
... normalmente se 0 = false, se !=0 true quindi ... non è affatto detto che applicando l'operatore ~ su un bool tu, all'interno, abbia 0 e 1 ... potresti avere 0 e 255 che sempre false e true sono