&
Bitwise AND operator.
The bitwise operators perform operations of bitwise AND, bitwise OR, bitwise NOT and bitwise non-equivalence.
Syntax
where the arguments \(a\) and \(b\) may be further expressions. They are converted to the nearest integer to machine precision and then the operation is performed.
The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons.
Parentheses may be used as above to force particular groupings.
Examples
Here is an example of the bitwise AND and OR operators. It uses the file bitwise.csd.
Example of the bitwise operators. |
---|
| <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>
|
Here is an example for the bitwise-group, comparing the different bitwise opcodes. It uses the file bitwise-group.csd.
Example of the bitwise group. |
---|
| <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>
|
See also
Arithmetic and Logic Operations