'|'之间的区别和位操作中的'+'

时间:2017-04-07 05:09:31

标签: bit-manipulation

我想用

00011011代表

ABCD

假设我有一个字符串,我想表达所有长度为5的子字符串。这样我就可以表达

  

AAABB0000000101

现在,我有一个字符串 s 和一个整数标记,用于表示 s 的子字符串。当我在子串 mark = mark<< 2 |中添加B时1 我的问题是 mark = mark<< 2 |之间的区别是什么1 标记=标记<< 2 + 1

2 个答案:

答案 0 :(得分:1)

可能取决于您使用的语言(请在下次添加标签!),但通常运算符优先级为:+<< |

因此,您实际上是在比较(mark << 2) | 1mark << (2+1)。期待完全不同的结果。

如果您的问题是关于|(按位OR)和+(补充),那么我建议您了解每个运算符的作用,然后再回答一个更具体的问题。

如果您想知道:(mark << 2) | 1(mark << 2) + 1返回相同的结果,因为左移保证最后一位为零。

答案 1 :(得分:0)

如前所述,它取决于您使用的编程语言或工具以及它们如何将+视为。

+通常主要用作加法,所以如果它是二进制加法,结果可能会非常不同。例如,(假设8位数),

01011001 + 000000001 => 01011010

其中,

01011001 | 00000001 => 01011001