-1

在编程语言中,& 和 | 等运算符 被称为位操作符。我的问题甚至是加法(+)和减法(-)或者任何数学表达式都是按位运算。我的意思是计算发生在二进制数据上,因为机器无法理解小数。我认为加法也会有一个加法门,所以为什么只有像 & 和 |(or) 这样的运算符被称为按位运算符。

4

4 回答 4

6

因为按位运算符只对位进行操作,所以它们什么都不做“更多”,也没有底层格式的问题。

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

另外,你忘记了一些:还有^按位异或运算符,~它不是按位的,当然还有移位运算符<<and >>

于 2013-10-31T07:24:55.490 回答
1

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

但是,当然,所有运算符都有改变位的目的。按位只是 C 语言的命名约定。严格来说,C 将运算符与相关运算符组合在不同的组中,如下所示(C11 6.5):

  • 加法运算符 + -
  • 位移运算符>> <<
  • 按位与运算符&
  • 按位异或运算符^
  • 按位包含 OR 运算符|

等等。

于 2013-10-31T07:27:39.340 回答
0

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

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

于 2013-10-31T12:43:45.357 回答
0

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

于 2013-10-31T07:31:18.460 回答