加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 这个xor的错误是什么

发布时间:2020-12-16 10:53:32 所属栏目:百科 来源:网络整理
导读:为什么,在C中使用这个xor时, int main() { bitset4 a=1100,b=0110,c; c = a ^ b; cout c; return 0;} 结果0100? 解决方法 那些常量不是二进制的,这就是原因. 1100十进制是10001001100二进制. 0110八进制是1001000二进制. (为什么八进制为第二个?因为以前导
为什么,在C中使用这个xor时,

int main() {
    bitset<4> a=1100,b=0110,c;
    c = a ^ b;
    cout << c;
    return 0;
}

结果0100?

解决方法

那些常量不是二进制的,这就是原因. 1100十进制是10001001100二进制. 0110八进制是1001000二进制. (为什么八进制为第二个?因为以前导零开始并且仅由数字0..7组成的常量是C中的八进制.)

当你将两者都截断为4位时,你得到1100二进制XORed和1000二进制,得到0100二进制.

试试这个(假设您的编译器支持二进制文字的非标准前缀0b):

int main() {
    bitset<4> a=0b1100,b=0b0110,c;
    c = a ^ b;
    cout << c;
    return 0;
}

或者,以十六进制指定常量:

int main() {
    bitset<4> a=0xC,b=0x6,c;
    c = a ^ b;
    cout << c;
    return 0;
}

或作为字符串常量:(C 11)

int main() {
    bitset<4> a( "1100" ),b( "0110" ),c;
    c = a ^ b;
    cout << c;
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读