MATLAB的兩種移位運算:
1)circshift矩陣移位
circshift:循環移位數組
語法:B = circshift(A,shiftize)
說明:
B = circshift(A,shiftize)通過shiftize元素循環移位數組A中的值。shiftize是整數標量的向量,其中第n個元素指定數組A的第n維的移位量。如果移位中的元素為正,則A的值向下(或向右)移位。如果是負數,則A的值向上(或向左)移動。如果為0,則不移動該維度中的值。
示例:
將第一維值向下循環移動1.
A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
B =環球(A,1)
B =
7 8 9
1 2 3
4 5 6
將第一維值向下循環1,將第二維值向左
循環1. B = circshift(A,[1 -1]);
B =
8 9 7
2 3 1
5 6 4
2)bitshift位移位
bitshift:
移位位指定的位數
句法 :
C = bitshift(A,k)
C = bitshift(A,k,n)
說明:
C = bitshift(A,k)返回移位了k位的A的值。輸入參數A必須是無符號整數或無符號整數數組。通過k移位與乘以2 ^ k相同。允許k的負值,這對應於向右移位,或者除以2 ^ abs(k)並截斷為整數。如果移位導致C溢出無符號整數類A中的位數,則丟棄溢出位。
C = bitshift(A,k,n)導致任何溢出n位的位被丟棄。n的值必須小於或等於A的無符號整數類的位長(例如,對於uint32,n <= 32)。
而不是使用bithift(A,k,8)或n的另一個冪2,考慮使用bitshift(uint8(A),k)或適當的無符號整數類。
例子:
例1
將1100(12,十進制)移位到左邊的兩位產生110000(48,十進制)。
C = bitshift(12,2)
C =
48
例2
重復地將無符號16位值的位向左移位,直到所有非零位溢出。跟蹤二進制的進度:
a = intmax('uint16');
disp(sprintf(...
'初始uint16值%5d是二進制中的%16s',...
a,dec2bin(a)))
對於k = 1:16
a = bitshift(a,1);
disp(sprintf(...
'Shifted uint16 value%5d is binary 16s in binary',...
a,dec2bin(a)))
end