为什么只有&和|被称为位运算符?

时间:2013-10-31 07:20:06

标签: c operators bit-manipulation

在编程语言中,运算符如&和|被称为位运算符。我的问题是偶数加(+)和减法( - ),或者就此而言,任何数学表达式都是逐位运算。我的意思是计算发生在二进制数据上,因为机器无法理解小数。我认为另外还会有一个添加门,所以为什么只有运营商喜欢&和|(或)被称为逐位运算符。

4 个答案:

答案 0 :(得分:7)

因为按位运算符仅对这些位进行操作,所以它们不会“更多”,并且不存在底层格式的问题。

Addition将一堆位视为一个数字,可能是有符号的(甚至是浮点数);这意味着它必须以特定方式解释这些位(例如,二进制补码,有符号幅度,浮点等),而按位运算符将这些位视为“原始”位,没有解释且位之间没有依赖关系可能存在更高级别的数字格式。

另外,你忘了一些:还有^按位XOR运算符,~是按位的,当然还有变换运算符<<>>。< / p>

答案 1 :(得分:1)

在C语言中,有许多运算符称为按位:& | ^ << >> ~ &= |= ^= <<= >>= ~=。它们的共同之处在于它们仅用于“原始二进制级别”的位操作,而不管变量包含哪种数据。

但是,当然,所有运营商都有改变比特的目的。 Bitwise只是C语言的命名约定。严格来说,C组将运营商与不同的运营商组合在一起,就像这样(C11 6.5):

  • 添加剂运算符 + -
  • 按位移位运算符&gt;&gt; &LT;&LT;
  • 按位AND运算符&amp;
  • 按位异或运算符 ^
  • 按位包含OR运算符 |

等等。

答案 2 :(得分:0)

^(XOR)和移位运算符也是按位运算符。这些和其他运算符之间的区别主要在于按位运算符不假设值的特定编码,就像整数的二进制补码表示的情况一样。此规则的一个小例外是&gt;&gt;除非最左边的位被解释为符号位,否则没有意义。

答案 3 :(得分:0)

在按位运算中,结果中某个特定位置的位值可能取决于操作数中相同位置的位值,但不是取决于任何其他位置的位值。

使用一个操作数,有2个可能的输入( false,true ),因此可以进行4个按位操作(x,而不是x,0和1)。对于两个操作数,有4种可能的输入组合,因此总共可以进行16次这样的操作(和,或者,xor,而不是x,而不是y,x,y,0,1 等)。