在C++中的位运算,如何实际应用?

4

我明白了

  11001110
& 10011000
= 10001000

但我想亲自测试它

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

unsigned char result;
result= 11001110 & 10011000;

cout<<result;

也尝试使用unsigned int进行测试,但结果是0,这不是我预期的。


1
这些是十进制数。 - BoBTFish
你正在定义十进制数字。请参考这个问题来指定二进制字面值。 - simonc
那是因为这些数字是十进制的,而不是二进制的。 阅读此线程以了解如何在C++中使用二进制。 - Sergi0
我们很快就会得到二进制字面量。 - chris
1
@Sergi0,实际上这个线程和答案已经过时了,因为C++11已经到来。 - Lol4t0
5个回答

3

1100111010011000在编译器的看法中不是二进制数。

二进制数11001110表示206,而10011000表示152,因此您想要的实际上是(我认为):

result = 206 & 152;

或者使用一个std::bitset,然后将结果打印为二进制数。

或者等到明年,然后(希望能够)写成0b11001110 - Mike Seymour
很遗憾,据我所知我们不能说 0b1011_1000_0001 - chris
@chris BOOST_BINARY(1011 1000 0001) - PiotrNycz
@PiotrNycz,有趣。希望他们能解决数字分隔符的问题。 - chris

3

您可能希望考虑使用hex进行测试。

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

int result = a & b;

cout << hex << result << endl;

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

1

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

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

你不一定非得使用十六进制。十进制和八进制也可以正常工作。有时候十六进制只是更好看一些。 - chris
在标准的C++中,你不能使用八进制数据类型。如果你使用十进制(我知道你指的是整数),它很难理解其字节。 - diwatu
@Giswin,C++有八进制字面量,就像它有十六进制字面量一样。 - juanchopanza

0

二进制中的11001110与十进制中的同一个数字不相同。

由于C++没有二进制指定符(但有十六进制和八进制),您需要使用类似在线转换器的工具。

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


或者你可以在脑海中进行转换,甚至使用Windows计算器(如果你使用Windows)。或者使用std::bitset - chris
有趣的练习:用 c++ 自己编写它。这并不难。 - BoBTFish

0
如果你写了11001110,你得到的将是十进制数,而不是二进制数,就像Luchian指出的那样。
如果要得到一个二进制数,你必须写0b11001110。前缀0b 在 gcc、clang 和 tcc 中表示你正在使用二进制系统。
我不知道Visual C++编译器会如何处理这个前缀。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接