在matlab中使用位异或的错误

在matlab中使用位异或的错误,matlab,Matlab,我正在matlab中编写一个代码,下面是一个产生问题的模块,如下所示: sum1=0 ; sum2=0 ; for i=1:8 sum1=sum1+w1(i)*(2^(i-1)); end for i=1:8 sum2=sum2+w2(i)*(2^(i-1)); end sum1=floor(sum1); sum2=floor(sum2); z8=floor(z8); l1=

我正在matlab中编写一个代码,下面是一个产生问题的模块,如下所示:

    sum1=0 ;
    sum2=0 ;     
    for i=1:8
        sum1=sum1+w1(i)*(2^(i-1));
    end
    for i=1:8
        sum2=sum2+w2(i)*(2^(i-1));
    end
    sum1=floor(sum1);
    sum2=floor(sum2);
    z8=floor(z8);
    l1=bitxor(sum2,z8);
    l2=bitxor(sum1,z8);
这里z8和w1(i),w2(i)是整数元素。 每当我编译时,都会出现一个常规错误

“使用位异或时出错 双输入中必须有整数值 假定类型的范围。“


我查看了文档,并尝试将ASSUMEDTYPE添加为

我无法重建您的错误。将
w1
w2
z8
的虚拟值放在一起,代码工作。因此,我建议检查以下事项:

  • 必须确保
    位异或
    的输入为非负,且其值必须小于或等于
    2^64-1
    。检查
    sum1、sum2
    z8
    ,确保情况属实

  • 确保
    w1
    w2
    仅包含0或1的值。您在
    sum1
    sum2
    中所做的是重建8位无符号数字的10进制表示

  • 由于这看起来像8位无符号整数,因此使用附加参数
    uint8
    调用
    bitxor
    以强制转换为这种类型可能比较谨慎:

    l1 = bitxor(sum2, z8, 'uint8');
    l2 = bitxor(sum1, z8, 'uint8');
    
  • 示例运行 使用上面的代码并运行您的代码,我得到了
    l1
    l2
    的结果:

    >> l1
    
    l1 =
    
       137
    
    >> l2
    
    l2 =
    
       118
    

    您添加了什么作为
    假定类型
    ?结果如何?
    >> l1
    
    l1 =
    
       137
    
    >> l2
    
    l2 =
    
       118