如果你是用01字串來表示二進位制,那麼matlab有現成的函式circshift可用,方法是:
circshift(a",-n)"
只需bai要輸入二進位制字串a和需du要左移的位數n就可以呼叫來得到答案,舉幾個例子:
>> a = "10011110"; n = 1; circshift(a",-n)"
ans =
00111101
>> a = "10011110"; n = 2; circshift(a",-n)"
01111010
>> a = "10011110"; n = 3; circshift(a",-n)"
11110100
>> a = "10011110"; n = 4; circshift(a",-n)"
11101001
circshift這個函式本身的第二個引數如果為正則右移,如果為負則左移。而且可以用於移位任何維數的矩陣,不是你問的問題,就不多說了。
如果你不是用01字串,而是用本身的數值的內部二進位制形式,那麼有zhi兩種方法,一種是用dec2bin函式轉換為二進位制字串,在左邊添0擴充套件到你需要的位數,再用如上circshift函式。
另一種方法是用bitshift函式,不過需要自己判斷資料型別的長度、有符號還是無符號、以及最高位是1還是0,會稍微複雜一些,通常和fi函式配合可以簡化這些問題。具體的可以檢視bitshift和fi函式的文件。
如果你是用01字串來表示二進位制,那麼matlab有現成的函式circshift可用,方法是:
circshift(a",-n)"
只需bai要輸入二進位制字串a和需du要左移的位數n就可以呼叫來得到答案,舉幾個例子:
>> a = "10011110"; n = 1; circshift(a",-n)"
ans =
00111101
>> a = "10011110"; n = 2; circshift(a",-n)"
ans =
01111010
>> a = "10011110"; n = 3; circshift(a",-n)"
ans =
11110100
>> a = "10011110"; n = 4; circshift(a",-n)"
ans =
11101001
circshift這個函式本身的第二個引數如果為正則右移,如果為負則左移。而且可以用於移位任何維數的矩陣,不是你問的問題,就不多說了。
如果你不是用01字串,而是用本身的數值的內部二進位制形式,那麼有zhi兩種方法,一種是用dec2bin函式轉換為二進位制字串,在左邊添0擴充套件到你需要的位數,再用如上circshift函式。
另一種方法是用bitshift函式,不過需要自己判斷資料型別的長度、有符號還是無符號、以及最高位是1還是0,會稍微複雜一些,通常和fi函式配合可以簡化這些問題。具體的可以檢視bitshift和fi函式的文件。