考虑以下两个操作数均为十进制的表达式:a^b
或a&b
我知道操作符对操作数的二进制数字做了什么,因此我知道答案如何
计算a^b
或a&b
。
我不知道的是这些操作是否可以翻译成十进制形式
例如:我们可以说a<<b
等同于此操作:a*pow(2,n)
a^b
或a&b
是否与此类似?
答案 0 :(得分:2)
位操作(AND,OR,NOT,XOR)是布尔代数的逻辑扩展。布尔代数对二进制值进行操作(如果需要,则为true / false)。所以不,对于这个运算符,十进制值没有扩展名。
答案 1 :(得分:1)
没有。没有“十进制”等价物。
首先,整数是整数...不是二进制整数或十进制整数。
其次,^
,&
和|
运算符是根据它们定义的(数学上)。对单个位的影响,因此甚至不清楚十进制等值可能是什么。
例如:我们可以说
a<<b
等同于此操作:a*pow(2,n).
a^b
或a&b
是否等同于此类操作?
总之......没有。
(此外,你所拥有的例子与二进制与十进制无关。)
我唯一可以想到的是可以被解释为类似这样的十进制等值:
将两个int
个操作数转换为整数数组,其中每个数组的每个元素代表相应int
中的十进制数字。
对每个int
数组的相应元素执行按位运算,给出第3个int
数组。
将第3个int
数组转回int
。
(或者你可以使用字符串而不是整数数组来做同样的事情......)
但是,我不清楚这是有意义的还是......你想要实现的目标。
答案 2 :(得分:0)
没有。一个人可能得到的最接近的事情就是将它们与十进制运算符进行比较:
&
运算符与乘法进行比较(0*0=0
,0*1=0
,1*1=1
)^
运算符与无差异加法进行比较(0+0=0
,0+1=1
,1+1=0
)|
运算符与常规添加进行比较(0+0=0
,0+1=1
,1+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
中获得添加结果