【问题标题】:bitwise operations in c++, how to actually use it?c++ 中的按位运算,如何实际使用它?
【发布时间】:2013-05-15 00:10:08
【问题描述】:

我明白了

  11001110
& 10011000
= 10001000

但我想自己测试一下

所以我声明了 unsigned char 并将其打印出来,但它只是给了我空白。

unsigned char result;
result= 11001110 & 10011000;

cout<<result;

也用 unsigned int 测试过,但它给了我 0,这不是我所期望的

【问题讨论】:

  • 这些是十进制数。
  • 您当前正在定义十进制数。请参阅this question 了解如何指定二进制文字
  • 那是因为这些数字是十进制的,而不是二进制的。阅读 [this thread][1] 关于如何在 C++ [1] 中使用二进制:stackoverflow.com/questions/2611764/…
  • 好吧,我们很快就会得到二进制字面量。
  • @Sergi0,实际上是this 线程和答案,因为 C++11 已经在这里

标签: c++ bitwise-operators


【解决方案1】:

1100111010011000 不是二进制数(至少在编译器看来)。

二进制11001110206,而10011000152,所以你实际上想要(我认为):

result = 206 & 152;

或使用std::bitset,然后将结果打印为二进制文件。

【讨论】:

  • 或者等到明年(希望)写0b11001110
  • @MikeSeymour,可惜我们不能说0b1011_1000_0001 AFAIK。
  • @chris BOOST_BINARY(1011 1000 0001)
  • @PiotrNycz,很有趣。不过,希望他们能解决数字分隔符问题。
【解决方案2】:

您可能需要考虑使用hex 进行测试

int a = 0xCE;    // 11001110
int b = 0x98;    // 10011000

int result = a & b;

cout << hex << result << endl;

或编写一个函数将result 转换为二进制。

【讨论】:

    【解决方案3】:

    在 c++ 中,您必须使用十六进制来表示位数。因为 11001110 是 0XCE 而 10011000 是 0X98

    unsigned char b1 = 0XCE;
    unsigned char b2 = 0X98;
    unsigned char b = b1 & B2;
    

    【讨论】:

    • 您不必使用十六进制。十进制和八进制也可以正常工作。十六进制有时更好。
    • 在标准 c++ 中,没有可以使用的八进制数据类型。如果你使用十进制(我知道你的意思是整数),很难理解它的字节数。
    • @Giswin C++ 有八进制文字,就像它有十六进制文字一样。
    【解决方案4】:

    二进制的11001110与十进制的数字不同。

    由于 c++ 没有二进制说明符(但有十六进制和八进制),因此您需要使用在线转换器之类的东西。

    获取在线二进制到十进制转换器, 将 11001110 转换为十进制,将 10011000 转换为十进制,执行&amp; 操作, 然后将结果从十进制转换回二进制。

    【讨论】:

    • 或者你可以在你的脑海中转换它,甚至是 Windows 计算器(如果你使用 Windows)。或使用std::bitset
    • 有趣的练习:自己写在c++。这并不难。
    【解决方案5】:

    如果你写11001110,你会得到一个十进制数,而不是一个二进制数,就像 Luchian 指出的那样。

    要获得二进制文件,你必须写0b11001110...前缀0b在gcc、clang和tcc中意味着你使用的是二进制系统。

    我不知道,Visual C++ 编译器会用这个前缀做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-13
      • 2020-01-23
      • 2012-07-31
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多