1
int main()
{
    cout << hex;
    cout << (0xe & 0x3); // 1110 & 0011 -> 0010 (AND)
    cout << endl;
    cout << (0xe | 0x3); // 1110 | 0011 -> 1111 (OR)
    cout << endl;
    cout << (0xe ^ 0x3); // 1110 ^ 0011 -> 1101 (XOR)
    return 0;
}

使用 cout 时,它显示转换(2、f 和 d)与实际值(0010、1111 和 1101)。我如何使它显示这个与位的内容?

4

2 回答 2

3

这些是hex您请求的二进制值表示的正确值:0010是 2、1111是 f 和1101是 d。

如果你想打印一个二进制表示,你可以从这里convBase借用函数,或者构建你自己的。

cout << convBase((0xe & 0x3), 2); // 1110 & 0011 -> 0010 (AND)
cout << endl;
cout << convBase((0xe | 0x3), 2); // 1110 | 0011 -> 1111 (OR)
cout << endl;
cout << convBase((0xe ^ 0x3), 2); // 1110 ^ 0011 -> 1101 (XOR)
于 2012-07-27T02:57:09.270 回答
1

例如:

#include <iostream>
#include <string>

using namespace std;

string convBase(unsigned long v, long base) {
  if (base < 2 || base > 16) return "Error: base out of range;";

  string result;
  string digits = "0123456789abcdef";

  do {
    result = digits[v % base] + result;
    v /= base;
  } while (v);

  return result;
}

int main(int argc, char** argv) {
  int a = 0xe;
  int b = 0x3;

  cout << hex;

  cout << (a & b) << " - " << convBase(a & b, 2);
  cout << endl;
  cout << (a | b) << " - " << convBase(a | b, 2);
  cout << endl;
  cout << (a ^ b) << " - " << convBase(a ^ b, 2);
  cout << endl;

  return 0;
}

输出:

2 - 10 f - 1111 d - 1101

于 2012-07-27T03:22:02.193 回答