包含按位AND(&)或按位异或(^)的运算是否具有十进制等效值?

时间:2013-12-18 10:33:00

标签: java bit-manipulation

考虑以下两个操作数均为十进制的表达式:a^ba&b

我知道操作符对操作数的二进制数字做了什么,因此我知道答案如何 计算a^ba&b。 我不知道的是这些操作是否可以翻译成十进制形式

例如:我们可以说a<<b等同于此操作:a*pow(2,n)

a^ba&b是否与此类似?

5 个答案:

答案 0 :(得分:2)

位操作(AND,OR,NOT,XOR)是布尔代数的逻辑扩展。布尔代数对二进制值进行操作(如果需要,则为true / false)。所以不,对于这个运算符,十进制值没有扩展名。

答案 1 :(得分:1)

没有。没有“十进制”等价物。

首先,整数是整数...不是二进制整数或十进制整数。

其次,^&|运算符是根据它们定义的(数学上)。对单个位的影响,因此甚至不清楚十进制等值可能是什么。

  

例如:我们可以说a<<b等同于此操作:a*pow(2,n). a^ba&b是否等同于此类操作?

总之......没有。

(此外,你所拥有的例子与二进制与十进制无关。)


我唯一可以想到的是可以被解释为类似这样的十进制等值:

  1. 将两个int个操作数转换为整数数组,其中每个数组的每个元素代表相应int中的十进制数字。

  2. 对每个int数组的相应元素执行按位运算,给出第3个int数组。

  3. 将第3个int数组转回int

  4. (或者你可以使用字符串而不是整数数组来做同样的事情......)

    但是,我不清楚这是有意义的还是......你想要实现的目标。

答案 2 :(得分:0)

没有。一个人可能得到的最接近的事情就是它们与十进制运算符进行比较:

  • 可以将&运算符与乘法进行比较(0*0=00*1=01*1=1
  • 可以将^运算符与无差异加法进行比较(0+0=00+1=11+1=0
  • 可以将|运算符与常规添加进行比较(0+0=00+1=11+1=2

但是,这些比较在应用于0或1以外的任何内容时都会明显失效。

答案 3 :(得分:0)

好吧,你可以用 NOT,OR,AND 重写任何布尔运算,例如

  a XOR b = (a AND (NOT b)) OR ((NOT a) AND b)  
  a EQU b = (a AND b) OR ((NOT a) AND (NOT b))  
  a IMP b = (NOT a) OR b

等。当 a b 时,部分情况(a等于0或1 b)你可以为操作添加简单的arithemtic等价物:

    NOT a == 1 - a
  a AND b == a * b
   a OR b == a + b - a * b 
  (for XOR, see the formula above and put expressions for AND, NOT and OR)

然而,在一般的情况下,执行逻辑运算( NOT,OR,AND on number's bits 这就是没有简单的十进制等值的原因 这些行动

答案 4 :(得分:0)

位XOR操作a^b就像是没有进位的加法 位AND操作a&b就像计算进位的存在一样 因此,你可以得到这种不那么有用的关系(a^b) + ((a&b)<<1) == (a+b)
不太有用,因为它将一个加法转换为另一个更复杂的加法 一点一点地进行它会更有用。

请注意,如果您对结果操作数a_2=(a_1^b_1)b_2=(a_1&b_1)<<1重复此转换次数(直到b_n==0),那么您将在a_n中获得添加结果