按位(我认为)或示例?

时间:2012-09-16 18:08:30

标签: c if-statement bit-manipulation

所以我想要if语句:if (foo == ("bar" | "barbar"))。我认为这是按位OR运算符,但我不确定。无论如何,这不起作用。关于我做错了什么想法?

4 个答案:

答案 0 :(得分:2)

正如@cnicutar所说,没有为字符串文字定义按位OR运算符|

在我看来,如果foo等于“bar”或“barbar”,你就会尝试执行代码。这个(注意这不起作用)看起来像这样(使用标准的布尔OR运算符,||):

if ((foo == "bar") || (foo == "barbar"))

这不起作用(它会编译,但可能不会按你的意图行事),因为“bar”和“barbar”(我猜foo也是)是字符指针,而这个if语句会比较ADDRESSES这些字符串。你要做的是:

if ((strcmp(foo, "bar") == 0) || (strcmp(foo, "barbar") == 0))

请注意,您必须检查strcmp()的结果是否为0,因为这表示相等。

答案 1 :(得分:1)

  

无论如何,这不起作用。关于我做错了什么想法?

没有为字符串文字定义按位或运算符,因此在该上下文中使用它是没有意义的。

答案 2 :(得分:1)

如果您想比较字符串,则需要使用strcmp()manpage):

if (strcmp(foo, "bar") == 0 ||
    strcmp(foo, "barber") == 0)
{
    ...
}

答案 3 :(得分:0)

逐位OR运算符对ORed值中的各个位执行OR运算。

实施例:     0b10111001 | 0b01101101 == 0b11111101

uint8_t a = 0xF0;
uint8_t b = 0x0F;
uint8_t c = a | b; // This is 0xFF

在文字的情况下,OR运算符操作的值是它们的地址,因此不会影响代码的意图。

正如之前的答案中所述,您应该使用strcmp库中的strncmpstring.h函数来比较字符串。