Please note that the recommended version of Scilab is 2024.1.0. This page might be outdated.
See the recommended documentation of this function
bitget
Extracts from integers bits of given indices
Syntax
y = bitget(x, pos)
Parameters
 x
 Scalar, vector, matrix or hypermatrix of positive decimal or encoded integers.
 pos
 Scalar, vector, matrix or hypermatrix of decimal or encoded integers in
[1, bitmax]
wherebitmax
is the maximal index of bits for the type ofx
: Indices of bits to be extracted. The bit #1 is the lightest one (2^{0}).typeof(x) bitmax .. typeof(x) bitmax int8 7 uint8 8 int16 15 uint16 16 int32 31 uint32 32 int64 63 uint64 64 decimal 1024  y
Scalar, vector, matrix or hypermatrix of 0 and 1 of the type of
x
. The sizes and contents ofy
are as follows:If
x
is a scalar:y
has the sizes ofpos
y(i,j,..)
is the value of bit #pos(i,j,..)
ofx
.
If
pos
is a scalar:y
has the sizes ofx
y(i,j,..)
is the value of the bit #pos
ofx(i,j,..)
.
If
x
andpos
are arrays with identical sizes, the processing is elementwise:y
has the sizes ofx
andpos
y(i,j,..)
is the value of the bit #pos(i,j,..)
ofx(i,j,..)
.
Otherwise:
y
is a matrix withlength(x)
rows andlength(pos)
columns.y(i,j)
is the value of the bit #pos(j)
ofx(i)
.
Description
bitget()
scans chosen bits of the binary representation of some
positive integers x
. It returns 0 for bits down, and 1 for bits up.
The result has the sizes of x
or of pos
or
of both inputs.
However, when both x
and pos
are nonscalar and
have mismatching sizes, the result y
is a matrix ignoring the sizes
of x
. Then, after reshaping y
with
y = matrix(y, [size(x) 1])
, the value of the bit #b of
x(i,..,k)
is in y(i,..,k,b)
.
Examples
// 19 is (10011)_2 // The 2nd bit is 1 (starting from the end). x = uint8(19); pos = 2; y = bitget(x,pos) expected = 1; // 13 is (1101)_2 dec2bin(13) bitget(uint8(13),4:1:1)
With encoded integers:
> b = [1 3 8 11 15]; > x = sum(int16(2).^(b1)) x = 17541 > B = bitget(x, 1:15) B = 1 0 1 0 0 0 0 1 0 0 1 0 0 0 1 > find(B) ans = 1. 3. 8. 11. 15. > typeof(B) ans = "int16"
With uint64 integers > 2^{52}:
> b = [1 12 23 34 45 53 64]; > x = sum(uint64(2).^(b1)) x = 9227893237262321665 > B = bitget(x, 1:64) B = column 1 to 32 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 column 33 to 64 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 > find(B) ans = 1. 12. 23. 34. 45. 53. 64. > typeof(B) ans = "uint64"
With big decimal integers > 2^{52}:
x = sum(2 .^([7 16 18 19 25 52 70]1)) bitget(x, [7 16 18 19 35 52 70 80])
> x = sum(2 .^([7 16 18 19 25 52 70]1)) x = 5.903D+20 > bitget(x, [7 16 18 19 35 52 70 80]) ans = Nan Nan 1. 1. 0. 1. 1. 0.
x and pos are arrays with mismatching sizes:
x = [ 39 6 62 8 14 29 4 64 12 44 39 50 52 12 39 5 4 29 ]; x = sum(2.^(x1),2); bitget(x, [5 8 12 39])
> bitget(x, [5 8 12 39]) ans = Nan Nan 0. 1. 0. 1. 0. 0. Nan Nan 1. 0. 0. 0. 0. 1. 0. 0. 1. 1. 1. 0. 0. 0.
See Also
 bitstring — A string giving the literal bit representation of a number
 dec2bin — convert from decimal to binary
 bitset — Sets bits of given indices in some integers
 bitand — bitwise logical AND between elementwise integers of 2 arrays
 & — Binary AND between integers. Logical AND over/between booleans and numbers
History
Version  Description 
6.1 

Report an issue  
<< bitcmp  Bitwise operations  bitor >> 