进行三向异或的最简单方法是什么?
换句话说,我有三个值,我想结果为true IFF只声明一个三个值是真实的.
到目前为止,这是我提出的:
((a ^ b)&&(a ^ c)&&!(b && c))|| ((b ^ a)&&(b ^ c)&&!(a && c))|| ((c ^ a)&&(c ^ b)&&!(a && b))
是否有更简单的事情做同样的事情?
以下是上述完成任务的证明:
a = true; b = true; c = true
((a ^ b) && (a ^ c) && !(b && c)) || ((b ^ a) && (b ^ c) && !(a && c)) || ((c ^ a) && (c ^ b) && !(a && b))
=> false
a = true; b = …Run Code Online (Sandbox Code Playgroud) 我们如何在python中异或十六进制数字,例如.我想xor'ABCD'到'12EF'.答案应该是B922.
我使用下面的代码,但它返回垃圾值
def strxor(a, b): # xor two strings of different lengths
if len(a) > len(b):
return "".join(["%s" % (ord(x) ^ ord(y)) for (x, y) in zip(a[:len(b)], b)])
else:
return "".join(["%s" % (ord(x) ^ ord(y)) for (x, y) in zip(a, b[:len(a)])])
key ='12ef'
m1='abcd'
print strxor(key,m1)
Run Code Online (Sandbox Code Playgroud) 我读到^运算符是C#中的逻辑XOR运算符,但我也认为它是"power of"运算符.解释是什么?
寻找一点正则表达式的帮助.我想设计一个表达式,匹配一个字符串与" foo "或" bar ",但不是" foo "和" bar "
如果我做的事情......
/((foo)|(bar))/
Run Code Online (Sandbox Code Playgroud)
它会匹配" foobar ".不是我想要的.那么,只有当一个术语或另一个术语存在时,如何才能使正则表达式匹配?
谢谢!
//key & hash are both byte[]
int leftPos = 0, rightPos = 31;
while(leftPos < 16) {
//possible loss of precision. required: byte, found: int
key[leftPos] = hash[leftPos] ^ hash[rightPos];
leftPos++;
rightPos--;
}
Run Code Online (Sandbox Code Playgroud)
为什么Java中的两个字节的按位运算会返回一个int?我知道我可以把它转回到字节,但它看起来很傻.
我的问题使用Java作为例子,但我想它可能适用于所有.
在比较布尔值时,XOR运算符(在java中是^)和NOT-EQUAL-TO(在java中是!=)之间是否存在实际差异?
我在这里评估了一些东西,但我一直在想(似乎很奇怪,两件事情相等)......并且没有在网上找到任何东西.在一些论坛中只有一次讨论快速结束而没有任何结果.
基本上要快速简单,我希望在django模板中运行XOR条件.在你问为什么我不在代码中这样做之前,这不是一个选择.
基本上我需要检查用户是否在两个多对多对象之一.
req.accepted.all
Run Code Online (Sandbox Code Playgroud)
和
req.declined.all
Run Code Online (Sandbox Code Playgroud)
现在他们只能在一个或另一个(因此XOR条件).从浏览文档来看,我唯一可以理解的是以下内容
{% if user.username in req.accepted.all or req.declined.all %}
Run Code Online (Sandbox Code Playgroud)
我在这里遇到的问题是,如果user.username确实出现在req.accepted.all中,那么它会转义条件,但如果它在req.declined.all中,那么它将遵循条件子句.
我在这里错过了什么吗?
最初的问题陈述是这样的:
给定一个32位无符号整数数组,其中每个数字除了其中三个(恰好只出现一次)之外恰好出现两次,使用O(1)额外空格在O(n)时间内找到这三个数字.输入数组是只读的.如果有k个例外而不是3个怎么办?
如果由于输入限制(阵列最多可以包含2 33个条目)而接受非常高的常数因子,则很容易在?(1)时间和?(1)空间上解决这个问题:
for i in lst:
if sum(1 for j in lst if i == j) == 1:
print i
Run Code Online (Sandbox Code Playgroud)
因此,为了这个问题,让我们放弃比特长度的限制,并专注于数字可以达到m比特的更普遍的问题.
推广k = 2的算法,我想到的是以下内容:
1和具有0单独的那些数字进行异或.如果对于两个分区,结果值不为零,我们知道我们已将非重复数字划分为两个组,每个组至少有一个成员不过,有一个特殊情况需要考虑.如果在对一个组进行分区后,其中一个组的XOR值都为零,我们不知道其中一个结果子组是否为空.在这种情况下,我的算法只是将该位丢弃并继续下一个,这是不正确的,例如它输入失败[0,1,2,3,4,5,6].
现在我的想法是不仅要计算元素的XOR,还要计算应用某个函数后的值的异或(我在f(x) = 3x + 1这里选择).有关此附加检查的反例,请参阅下面的Evgeny的答案.
现在虽然以下算法对于k> = 7是不正确的,但我仍然在这里包含实现以给你一个想法:
def xor(seq):
return reduce(lambda x, y: x ^ y, seq, 0)
def compute_xors(ary, mask, bits):
a = xor(i for i in ary if i …Run Code Online (Sandbox Code Playgroud) 我不确定这个术语的确切定义.
我知道逐位XOR运算正在逐位进行,并且相应位的XOR位置正确.这个结果被称为'XOR sum'吗?如果不是,什么是XOR总和,以及如何使用XOR来实现此添加?
我需要检查两个整数是否在零的同一侧多次.我不在乎它是积极的还是消极的,只是它是同一面......并且表现非常重要.
目前我这样做:
if (int1 == 0 || int2 == 0) {
// handle zero
} else if ((int1 ^ int2) > 0) {
// different side
} else {
// same side
}
Run Code Online (Sandbox Code Playgroud)
这比速度提高30%(用卡尺测试)更明显:
if ((int1 > 0 && int2 > 0) || (int1 < 0 && int2 < 0)) {
Run Code Online (Sandbox Code Playgroud)
可以更快地完成吗?
如果有人想看到我用于30%的测试框架,它就在这里.我用了卡尺0.5-rc1
注意:所有这些解决方案都检查第一位,基本上,零与正数相同.因此,如果它适用于您的应用程序,则无需进行零检查.
基准清单:
((&&)||(&&))解决方案(>>31) == (>>31)(0x80000000)==不使用^ …