Next: Package bode, Previous: Package bernstein [Contents][Index]
The package bitwise
provides functions that allow to manipulate
bits of integer constants. As always maxima attempts to simplify the result
of the operation if the actual value of a constant isn’t known considering
attributes that might be known for the variables, see the declare
mechanism.
Inverts all bits of a signed integer. The result of this action reads
-int - 1
.
(%i1) load("bitwise")$
(%i2) bit_not(i); (%o2) bit_not(i)
(%i3) bit_not(bit_not(i)); (%o3) i
(%i4) bit_not(3); (%o4) - 4
(%i5) bit_not(100); (%o5) - 101
(%i6) bit_not(-101); (%o6) 100
This function calculates a bitwise and
of two or more signed integers.
(%i1) load("bitwise")$
(%i2) bit_and(i,i); (%o2) i
(%i3) bit_and(i,i,i); (%o3) i
(%i4) bit_and(1,3); (%o4) 1
(%i5) bit_and(-7,7); (%o5) 1
If it is known if one of the parameters to bit_and
is even this information
is taken into consideration by the function.
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd); (%o2) done
(%i3) bit_and(1,e); (%o3) 0
(%i4) bit_and(1,o); (%o4) 1
This function calculates a bitwise or
of two or more signed integers.
(%i1) load("bitwise")$
(%i2) bit_or(i,i); (%o2) i
(%i3) bit_or(i,i,i); (%o3) i
(%i4) bit_or(1,3); (%o4) 3
(%i5) bit_or(-7,7); (%o5) - 1
If it is known if one of the parameters to bit_or
is even this information
is taken into consideration by the function.
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd); (%o2) done
(%i3) bit_or(1,e); (%o3) e + 1
(%i4) bit_or(1,o); (%o4) o
This function calculates a bitwise or
of two or more signed integers.
(%i1) load("bitwise")$
(%i2) bit_xor(i,i); (%o2) 0
(%i3) bit_xor(i,i,i); (%o3) i
(%i4) bit_xor(1,3); (%o4) 2
(%i5) bit_xor(-7,7); (%o5) - 2
If it is known if one of the parameters to bit_xor
is even this information
is taken into consideration by the function.
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd); (%o2) done
(%i3) bit_xor(1,e); (%o3) e + 1
(%i4) bit_xor(1,o); (%o4) o - 1
This function shifts all bits of the signed integer int
to the left by
nBits
bits. The width of the integer is extended by nBits
for
this process. The result of bit_lsh
therefore is int * 2
.
(%i1) load("bitwise")$
(%i2) bit_lsh(0,1); (%o2) 0
(%i3) bit_lsh(1,0); (%o3) 1
(%i4) bit_lsh(1,1); (%o4) 2
(%i5) bit_lsh(1,i); (%o5) bit_lsh(1, i)
(%i6) bit_lsh(-3,1); (%o6) - 6
(%i7) bit_lsh(-2,1); (%o7) - 4
This function shifts all bits of the signed integer int
to the right by
nBits
bits. The width of the integer is reduced by nBits
for
this process.
(%i1) load("bitwise")$
(%i2) bit_rsh(0,1); (%o2) 0
(%i3) bit_rsh(2,0); (%o3) 2
(%i4) bit_rsh(2,1); (%o4) 1
(%i5) bit_rsh(2,2); (%o5) 0
(%i6) bit_rsh(-3,1); (%o6) - 2
(%i7) bit_rsh(-2,1); (%o7) - 1
(%i8) bit_rsh(-2,2); (%o8) - 1
determines how many bits a variable needs to be long in order to store the
number int
. This function only operates on positive numbers.
(%i1) load("bitwise")$
(%i2) bit_length(0); (%o2) 0
(%i3) bit_length(1); (%o3) 1
(%i4) bit_length(7); (%o4) 3
(%i5) bit_length(8); (%o5) 4
determines if bits nBit
is set in the signed integer int
.
(%i1) load("bitwise")$
(%i2) bit_onep(85,0); (%o2) true
(%i3) bit_onep(85,1); (%o3) false
(%i4) bit_onep(85,2); (%o4) true
(%i5) bit_onep(85,3); (%o5) false
(%i6) bit_onep(85,100); (%o6) false
(%i7) bit_onep(i,100); (%o7) bit_onep(i, 100)
For signed numbers the sign bit is interpreted to be more than nBit
to the
left of the leftmost bit of int
that reads 1
.
(%i1) load("bitwise")$
(%i2) bit_onep(-2,0); (%o2) false
(%i3) bit_onep(-2,1); (%o3) true
(%i4) bit_onep(-2,2); (%o4) true
(%i5) bit_onep(-2,3); (%o5) true
(%i6) bit_onep(-2,4); (%o6) true
If it is known if the number to be tested is even this information is taken into consideration by the function.
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd); (%o2) done
(%i3) bit_onep(e,0); (%o3) false
(%i4) bit_onep(o,0); (%o4) true
Next: Package bode, Previous: Package bernstein [Contents][Index]