matlab中,怎么样实现二进制数的 循环左移 ? 例如:对于二进制数:01000111 循环左移2位后变成:00011101

2025-02-25 16:35:42
推荐回答(2个)
回答1:

非常简单。如果你是用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函数的文档。

回答2:

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))