如何在c ++中对位串进行逻辑运算?

时间:2015-10-25 07:56:24

标签: c++ logical-operators bits

我必须以 10101110000 的形式输入一个输入,如果我以字符串的形式接受它,那么如果我想对该字符串进行逻辑操作,如 OR AND NOT异或,我该怎么办?任何建议都表示赞赏...我很抱歉,如果它是一个简单的,因为我是c ++的新手..感谢提前!!

int main() {  
int ns,nt;
cin >> ns >> nt; //no: of students,no: of topics
vector<string> st;
for(int i=0;i<ns;i++) //taking binary strings as input
    {
    string s;
    cin >> s;
    st.push_back(s);
}
string a = st[0] | st[1];
cout << a;
return 0;
}

此方法不起作用:( :(

1 个答案:

答案 0 :(得分:0)

如果要进行按位操作,并且确定要处理的位数不超过32位(假设系统为32位或更多),则可以使用strtoul将字符串转换为无符号字符串长。因为按位和,或者xor在整数类型上是自然。代码可能变成:

int main() {  
    int ns,nt;
    cin >> ns >> nt; //no: of students,no: of topics
    vector<unsigned long> st;
    for(int i=0;i<ns;i++) //taking binary strings as input
    {
        unsigned long val;
        char *ix;
        string s;
        cin >> s;
        if (!cin) { // control stream state (end of file...)
            cerr << "Input error" << endl;
            return 1;
        }
        val = ::strtoul(s.c_str(), &ix, 2); // convert from binary to integral
        if (*ix != '\0') {     // control input validity
            cerr << "Wrong value >" << s << "<" << endl;
            i -= 1;
        }
        else st.push_back(val);
    }
    unsigned long a = st[0] | st[1];
    cout << a;
    return 0;
}