Main Content

bitshift

Shift bits specified number of places

Description

example

c = bitshift(a,k) returns the value of fi object a shifted by k bits.

The shift is arithmetic and behaves like b = a.*2^k with the value of b cast to the type of input a. The cast of b may involve overflow or loss of precision.

The OverflowAction property of a is obeyed, but the RoundingMethod is always Floor. If obeying the RoundingMethod property of a is important, try using the pow2 function.

When the overflow action of a is Saturate, the sign bit is always preserved. When the overflow action of a is Wrap and k is negative, the sign bit is preserved. When the overflow action of a is Wrap and k is positive, the sign bit may change.

  • When k is positive, 0-valued bits are shifted in on the right.

  • When k is negative and a is unsigned, or a signed and positive fi object, 0-valued bits are shifted in on the left.

  • When k is negative and a is a signed and negative fi object, 1-valued bits are shifted in on the left.

Examples

collapse all

This example highlights how changing the OverflowAction property of the fimath object can change the results returned by the bitshift function. Consider the following signed fixed-point fi object with a value of 3, word length 16, and fraction length 0.

a = fi(3,1,16,0);

By default, the OverflowAction fimath property is Saturate. When a is shifted such that it overflows, it is saturated to the maximum possible value.

for k=0:16
    b=bitshift(a,k);
    disp([num2str(k,'%02d'),'. ',bin(b)]);
end
00. 0000000000000011
01. 0000000000000110
02. 0000000000001100
03. 0000000000011000
04. 0000000000110000
05. 0000000001100000
06. 0000000011000000
07. 0000000110000000
08. 0000001100000000
09. 0000011000000000
10. 0000110000000000
11. 0001100000000000
12. 0011000000000000
13. 0110000000000000
14. 0111111111111111
15. 0111111111111111
16. 0111111111111111

Now change OverflowAction to Wrap. In this case, most significant bits shift off the "top" of a until the value is zero.

a = fi(3,1,16,0,'OverflowAction','Wrap');
for k=0:16
    b=bitshift(a,k);
    disp([num2str(k,'%02d'),'. ',bin(b)]);
end
00. 0000000000000011
01. 0000000000000110
02. 0000000000001100
03. 0000000000011000
04. 0000000000110000
05. 0000000001100000
06. 0000000011000000
07. 0000000110000000
08. 0000001100000000
09. 0000011000000000
10. 0000110000000000
11. 0001100000000000
12. 0011000000000000
13. 0110000000000000
14. 1100000000000000
15. 1000000000000000
16. 0000000000000000

Input Arguments

collapse all

Input fi object, specified as a scalar or vector. a can be any fixed-point numeric type.

Data Types: fi

Number of bits to shift by, specified as a scalar.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Output Arguments

collapse all

Result of shifting a by k bits, returned as a fi object. The output fi object c has the same numerictype as a.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Introduced before R2006a