为什么代码显示错误?

时间:2016-01-12 18:19:15

标签: matlab logical-operators

你能帮我解释一下这段代码出错的原因吗?我想使用XOR,但我不能。我正在尝试使用以下公式执行此操作:“A XOR B= (A AND ~B)OR(~A AND B)。您能否暗示我做错了什么?

public = 'public';
password = 'passwd';
if length(public)== length(password)
    public = uint8(public);
    password = uint8(password);
    negpublic = ~(dec2bin(public));
    negpassword = ~(dec2bin(password));
    score = bitor(bitand(public,negpassword),bitand(negpublic,password));
    public = dec2bin(public);
    password = char(password)


else
    fprintf('length not ok!\n' );
end

2 个答案:

答案 0 :(得分:1)

为什么代码会产生错误?

让我们先列出错误:

  

使用bit和输入时出错必须是有符号或无符号整数   相同的班级或标量双打。

     

foo错误(第8行)       得分=比特(bitand(公共,negpassword),bitand(negpublic,密码));

好的,以下行产生错误:

score = bitor(bitand(public,negpassword),bitand(negpublic,password)); 

我们可以将其分解,并看到以下两个表达式都会产生错误

bitand(public,negpassword)
bitand(negpublic,password) 

为什么呢?如果我们仔细查看这两个中的第一个,我们会看到publicnegpassword以及不合规用于bitand

public =

  112  117   98  108  105   99

negpassword =

     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0

这两者必须至少具有相同的维度。有关详细信息,请参阅the reference for Bit-wise OR

我不确定你要在这里实现什么,但不是Matlab有自己的bitxor函数:

public = 'public';
password = 'passwd';
if length(public)== length(password)
    public = uint8(public);
    password = uint8(password);
    score = bitxor(public,password);
    public = dec2bin(public);
    password = char(password);
else
    fprintf('length not ok!\n' );
end

答案 1 :(得分:1)

通常情况下,我不提供家庭作业问题的答案,但似乎你几乎就在那里。逻辑已经完成,这是我猜的重要部分。

关于代码,这里有一些错误。函数dec2bin将欺骗你。据我所知,matlab不支持二进制格式。 dec2bin实际上将数字转换为char :(。但是,使用二进制格式的文本不是执行按位操作的要求。我不能真正看到在matlab中使用二进制格式,因为最小大多数计算机架构的数据单元通常是一个字节。

您可以使用函数bitcmp(按位补码,这是按位NOT的另一个字)来进行否定。其次,按位运算也可以对向量起作用。第三,可以将否定定义为变量,但是对于大多数处理器和操作系统来说,位操作是最便宜的,因此坦率地说,这仅仅是两次使用所不必要的。所以一切的内容都是你可以简化很多事情。

ab = 'ab'; bb = 'bb';
ab=uint8(ab); bb=uint8(bb);
bitor(bitand(ab,bitcmp(bb)), bitand(bb,bitcmp(ab)))
相关问题