# bitshift

Shift bits specified number of places

## Syntax

``c = bitshift(a,k)``

## 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`.

## Version History

Introduced before R2006a