Skip to Main Content Skip to Search
Product Documentation

bitshift - Shift bits specified number of places

Syntax

c = bitshift(a, k)

Description

c = bitshift(a, k) returns the value of a shifted by k bits. The input fi object a may be a scalar value or a vector and can be any fixed-point numeric type. The output fi object c has the same numeric type as a. k must be a scalar value and a MATLAB built-in numeric type.

The OverflowMode property of a is obeyed, but the RoundMode is always floor. If obeying the RoundMode property of a is important, try using the pow2 function.

When the overflow mode is saturate the sign bit is always preserved. The sign bit is also preserved when the overflow mode is wrap, and k is negative. When the overflow mode is wrap and k is positive, the sign bit is not preserved.

Examples

This example highlights how changing the OverflowMode 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 OverflowMode 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 OverflowMode 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,'OverflowMode','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

See Also

bitand | bitcmp | bitget | bitor | bitset | bitsll | bitsra | bitsrl | bitxor | pow2

  


Free Early Verification Kit

Learn how to apply early verification to your development process through these technical resources.

How much time do you spend on testing to ensure implementation meets system-level requirements?

 © 1984-2012- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS