&
Prev | Orchestra Opcodes and Operators | Next

## &

& — Bitwise AND operator.

## Description

The bitwise operators perform operations of bitwise AND, bitwise OR, bitwise NOT and bitwise non-equivalence.

## Syntax

    a & b  (bitwise AND)

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.

## Performance

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 36. Example of the bitwise operators.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <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 37. 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

|, #, ¬

Prev | Up | Next
>> | Home | |