Matlab的两种移位运算
(2009-08-21 13:58:50)
标签:
杂谈 |
分类: MatlabStudy |
Matlab的两种移位运算:
1) circshift 矩阵移位
circshift :Shift array circularly
Syntax : B = circshift(A,shiftsize)
Description :
B
Example :
Circularly shift first dimension values down by 1.
A = [ 1 2 3;4 5 6; 7 8 9]
A =
B = circshift(A,1)
B =
Circularly shift first dimension values down by 1 and second
dimension values to the left by 1.
B = circshift(A,[1 -1]);
B =
2)bitshift 位移位
bitshift :
Shift bits specified number of places
Syntax :
C = bitshift(A, k)
C = bitshift(A, k, n)
Description :
C = bitshift(A, k) returns the value of A shifted by k bits. Input argument A must be an unsigned integer or an array of unsigned integers. Shifting by k is the same as multiplication by 2^k. Negative values of k are allowed and this corresponds to shifting to the right, or dividing by 2^abs(k) and truncating to an integer. If the shift causes C to overflow the number of bits in the unsigned integer class of A, then the overflowing bits are dropped.
C = bitshift(A, k, n) causes any bits that overflow n bits to be dropped. The value of n must be less than or equal to the length in bits of the unsigned integer class of A (e.g., n <= 32 for uint32).
Instead of using bitshift(A, k, 8) or another power of 2 for n, consider using bitshift(uint8(A), k) or the appropriate unsigned integer class for A.
Examples:
Example 1
Shifting 1100 (12, decimal) to the left two bits yields 110000 (48,
decimal).
C = bitshift(12, 2)
C =
Example 2
Repeatedly shift the bits of an unsigned 16 bit value to the left
until all the nonzero bits overflow. Track the progress in
binary:
a = intmax('uint16');
disp(sprintf( ...
for k = 1:16