&

& — Opérateur ET binaire.

Description

Les opérateurs binaires effectuent le ET binaire, le OU binaire, la négation binaire et la non-équivalence binaire.

Syntaxe

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.

Exécution

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.

Exemples

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>


Voir aussi

|, #, ¬