非常简单。如果你是用01字符串来表示二进制,那么matlab有现成的函数circshift可用,方法是:
circshift(a',-n)'
只需要输入二进制字符串a和需要左移的位数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字符串,而是用本身的数值的内部二进制形式,那么有两种方法,一种是用dec2bin函数转换为二进制字符串,在左边添0扩展到你需要的位数,再用如上circshift函数。
另一种方法是用bitshift函数,不过需要自己判断数据类型的长度、有符号还是无符号、以及最高位是1还是0,会稍微复杂一些,通常和fi函数配合可以简化这些问题。具体的可以查看bitshift和fi函数的文档。
n = 2; % 左移两位
a='01000111'
length1=length(a);
d=strcat(a(n+1:length1),a(1:n))
n = 5; % 左移5位
a='01000111'
length1=length(a);
d=strcat(a(n+1:length1),a(1:n))