& — Opérateur ET binaire.
Les opérateurs binaires effectuent le ET binaire, le OU binaire, la négation binaire et la non-équivalence binaire.
a & b (ET binaire)
où les arguments a et b peuvent être des expressions. Ils sont convertis à la valeur entière la plus proche selon la précision de la machine et l'opération est ensuite effectuée.
La priorité de ces opérateurs est inférieure à celle des opérateurs arithmétiques, mais supérieure à celle des comparaisons.
On peut utiliser des parenthèses pour forcer des groupements particuliers.
Voici un exemple des opérateurs bit à bit ET et OU. Il utilise le fichier bitwise.csd.
Exemple 36. Exemple des opérateurs bit à bit.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 instr 1 iresultOr = p4 | p5 iresultAnd = p4 & p5 prints "%i | %i = %i\\n", p4, p5, iresultOr prints "%i & %i = %i\\n", p4, p5, iresultAnd endin instr 2 ; decimal to binary converter Sbinary = "" inumbits = 8 icount init inumbits - 1 pass: ivalue = 2 ^ icount if (p4 & ivalue >= ivalue) then Sdigit = "1" else Sdigit = "0" endif Sbinary strcat Sbinary, Sdigit loop_ge icount, 1, 0, pass Stext sprintf "%i is %s in binary\\n", p4, Sbinary prints Stext endin </CsInstruments> <CsScore> i 1 0 0.1 1 2 i 1 + . 1 3 i 1 + . 2 4 i 1 + . 3 10 i 2 2 0.1 12 i 2 + . 9 i 2 + . 15 i 2 + . 49 e </CsScore> </CsoundSynthesizer>
Voici un exemple pour le group bit à bit, qui compare les différents opcodes bit à bit. Il utilise le fichier bitwise-group.csd.
Exemple 37. Exemple du groupe bit à bit.
<CsoundSynthesizer> <CsOptions> --nosound </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ; By Daniele Cucchi - 2020 ;a & b: bitwise AND ;a | b: bitwise OR ;a # b: bitwise NON EQUIVALENCE - XOR ; ~ a: bitwise NOT instr 1 kArrayA[] fillarray 0, 0, 1, 1 ; Fill array "A" with 4 values: 0, 0, 1, 1 i0A = i(kArrayA, 0) i1A = i(kArrayA, 1) i2A = i(kArrayA, 2) i3A = i(kArrayA, 3) kArrayB[] fillarray 0, 1, 0, 1 ; Fill array "B" with 4 values: 0, 1, 0, 1 i0B = i(kArrayB, 0) i1B = i(kArrayB, 1) i2B = i(kArrayB, 2) i3B = i(kArrayB, 3) ; Bitwise operations & fill arrays kAND[] = kArrayA & kArrayB kOR[] = kArrayA | kArrayB kNON[] fillarray i0B # i0A, i1B # i1A, i2B # i2A, i3B # i3A kNOT[] fillarray ~ i0A, ~ i1A, ~ i2A, ~ i3A ; Print values printarray kAND, "%d", "= bitwise AND" printarray kOR, "%d", "= bitwise OR" printarray kNON, "%d", "= bitwise NON" printarray kNOT, "%d", "= bitwise NOT\n" endin </CsInstruments> <CsScore> i1 0 1 e </CsScore> </CsoundSynthesizer>