微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在条件中使用按位运算符-无法将类型'int'隐式转换为'bool'

如何解决在条件中使用按位运算符-无法将类型'int'隐式转换为'bool'

我编写了以下代码,该代码使用bitField变量作为字符映射来检查字符在给定字符串中的存在情况

public static bool AllElementsUniqueInASCIIString(string str) {
    int bitField = 0;
    
    foreach (int character in str) {
        int idx = character - 'a';
        int mask = 1 << idx;
        if (bitField | mask == 1)
            return false;
        else
            bitField &= mask;
    }
    
    return true;
}

问题是,在表达式if (bitField | mask == 1)上,在编译时引发了以下错误

CS0029:无法将类型'int'隐式转换为'bool'

但是,当我用以下代码片段替换此行时,代码可以正常编译:

   int present = bitField | mask;
   if (present == 1) 

bitFieldmask都是整数,那么这个编译错误是怎么回事?我应该使用哪种语法来一次检查这种情况?

解决方法

您将需要使用括号来明确表达您的意图

if ((bitField | mask) == 1)

编译器认为您要执行以下操作(由于运算符的优先级)

if (bitField | (mask == 1))
      int    |    bool

错误告诉你的是什么

CS0019运算符'|'不能应用于类型为'int'的操作数,并且 '布尔'

简而言之,相等运算符的优先级高于布尔逻辑或按位逻辑或的运算符


其他资源

Operator precedence

在具有多个运算符的表达式中,具有较高运算符的运算符 优先级先于优先级较低的运算符

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。