MATLAB:位和后面的逻辑,并获得所有可能的状态

MATLAB:位和后面的逻辑,并获得所有可能的状态,matlab,binary,bit-manipulation,Matlab,Binary,Bit Manipulation,我被提供了这个代码 m0=0.8; m1=1.2; k=6; %where k can take values between 2 and 10; kbar=2^k; g_m = [0:(kbar-1)]; for i = 1: (kbar) g=1; for j=0:(kbar-1) if(bitand(g_m(i),2^j))~=0 g=g*m1; else g=g*m0; end end g_m(i)=g %results

我被提供了这个代码

m0=0.8;
m1=1.2;
k=6; %where k can take values between 2 and 10;
kbar=2^k;
g_m = [0:(kbar-1)];

for i = 1: (kbar)
  g=1;
  for j=0:(kbar-1)
    if(bitand(g_m(i),2^j))~=0
      g=g*m1;
    else
      g=g*m0;
    end
  end
  g_m(i)=g %results in a 1xN vector where N = all the possible states
end
我的问题是为什么
bitand
函数允许您生成所有可能的“状态”?
我不太确定我是否真正理解位背后的逻辑,除了搜索它所比较的值是否具有
bit=1
,因此
ans=1

位AND取2个值,将其转换为二进制,在两个值之间进行逻辑AND运算,并将结果从逻辑AND返回为十进制数。因此,对于2个给定的数字,它只返回一个值

位,并获取2个值,将它们转换为二进制,在两个值之间进行逻辑AND,并将结果从逻辑AND返回为十进制数。因此,对于2个给定的数字,它只返回一个值

您可能需要编辑问题以解决此问题并避免进一步混淆-只需点击上面的
|编辑|
链接。是的,已编辑。我在2和10之间选择值
k
,然后
kbar=2^k
您可能需要编辑问题以解决此问题并避免进一步混淆-只需点击上面的
|编辑|
链接即可。是已编辑。我在2和10之间选择value
k
,然后
kbar=2^k
ok,但是为什么
bitand
可以让我获得所有可能的状态?你得到所有可能的状态是因为你在2个for循环中。像上面这样使用
bitand
命令的代码是否意味着哈达玛产品?是的,它是这样做的。因为您可以将数字绘制为包含0和1的值的1*N矩阵。如果在两个矩阵中,在同一个索引中,你有1,你得到1,否则你得到0 OK,但是为什么
bit和
允许我得到所有可能的状态?你得到所有可能的状态是因为你在两个for循环中。像上面这样使用
bit和
命令的代码意味着哈达玛乘积吗?是的,它是这样做的。因为您可以将数字绘制为包含0和1的值的1*N矩阵。如果在这两个矩阵中,在同一个索引中有1,则得到1,否则得到0