int x=1;
int y=2;
x ^= y ^= x ^= y;
Run Code Online (Sandbox Code Playgroud)
我期待值被交换.但它给出x = 0和y = 1.当我尝试使用C语言时,它会给出正确的结果.
我正在研究一个问题,我期望N<20在XOR等于的数组中找到元素组合的数量P.
例如:我们的数组是{2 4 5 2 7}
1)如果N = 2且P = 6,
答案是2(因为我们只能选择(2 xor 4)= 6和(4 xor 2)= 6)
{ 2 4 5 2 7}或{2 4 5 2 7}
2)如果N = 3且P = 6
答案是1((4 x或5 x或7)= 6)
数组的大小可能非常大(大约10 ^ 6)所以我正在寻找快速算法来解决这个问题.
有时在ZX Spectrum Basic中进行编码时,我需要评估由两个操作数和逻辑xor形成的逻辑表达式,如下所示:
IF (left operand) xor (right operand) THEN
Run Code Online (Sandbox Code Playgroud)
由于ZX Basic只知道NOT,OR和AND我不得不求助于某种奇特的计算,其中包括左/右操作数的多种用法.这很尴尬,因为它消耗时间和内存,如果你在8位机器上工作,这两者都很稀疏.我想知道是否有一个模仿xor运算符的巧妙技巧.
为了测试结果,我提供了一个小代码示例:
5 DEF FN x(a,b)=(a ??? b) : REM the xor formula, change here
10 FOR a=-1 TO 1 : REM left operand
20 FOR b=-1 TO 1 : REM right operand
30 LET r=FN x(a,b) : REM compute xor
40 PRINT "a:";a;" b:";b;" => ";r
50 NEXT b
60 NEXT a
Run Code Online (Sandbox Code Playgroud)
你能帮我找一个高性能的解决方案吗?到目前为止,我尝试过,DEF FN x(a,b)=(a AND NOT b) OR (b AND NOT a)但它有点笨拙.
编辑:
如果你想测试你的想法,我建议使用BasinC …
如何仅使用基本算术运算来实现XOR运算(在两个32位整数上)?按顺序除以2的每个幂后,是否必须按位进行,或者是否有快捷方式?关于最简单,最短的代码,我并不关心执行速度.
编辑: 这不是家庭作业,而是hacker.org上的谜语.重点是在基于堆栈的虚拟机上实现XOR,操作非常有限(类似于brainfuck语言,是 - 没有shift或mod).使用该VM是困难的部分,尽管通过简短的算法当然更容易.
虽然FryGuy的解决方案很聪明,但我必须采用我原来的理想(类似于litb的解决方案),因为在这种环境中难以使用比较.
我有两个整数,我需要通过一个整数,然后得到两个整数的值.
我正在考虑使用逻辑运算符(AND,OR,XOR等).
以下代码
System.out.println("1 0 0: " + (true ^ false ^ false));
System.out.println("1 0 1: " + (true ^ false ^ true));
System.out.println("1 1 0: " + (true ^ true ^ false));
System.out.println("1 1 1: " + (true ^ true ^ true));
System.out.println("0 0 0: " + (false ^ false ^ false));
System.out.println("0 0 1: " + (false ^ false ^ true));
System.out.println("0 1 0: " + (false ^ true ^ false));
System.out.println("0 1 1: " + (false ^ true ^ …Run Code Online (Sandbox Code Playgroud) 我正在尝试进入C编程,而我在编写只有~和&运算符的按位XOR函数时遇到了麻烦.示例:bitXor(4, 5) = 1.我怎样才能做到这一点?
到目前为止我有这个:
int bitXor(int x, int y) {
return z;
}
Run Code Online (Sandbox Code Playgroud) 这是一个处理算法和按位xor运算的问题.我们给出了x1*x2*x3*....*xn=P,其中star(*)操作表示XOR(按位)操作, x1到xn是正整数.P也是正整数.我们需要找到min(a1 + a2 + a3 + ..... an) 这样的关系成立 - > (x1+a1)*(x2+a2)*(x3+a3)*....*(xn+an)=0.'+'表示正常的加法操作.
在.NET 4.5中,这种密码在32位和64位架构上运行良好.将项目切换到.NET 4.6会在64位中完全破解此密码,而在32位中,这个问题会出现奇怪的补丁.
在我的方法"DecodeSkill"中,SkillLevel是在.NET 4.6上打破的唯一部分. 这里使用的变量从网络流中读取并进行编码.
DecodeSkill(始终为SkillLevel返回正确的解码值)
private void DecodeSkill()
{
SkillId = (ushort) (ExchangeShortBits((SkillId ^ ObjectId ^ 0x915d), 13) + 0x14be);
SkillLevel = ((ushort) ((byte)SkillLevel ^ 0x21));
TargetObjectId = (ExchangeLongBits(TargetObjectId, 13) ^ ObjectId ^ 0x5f2d2463) + 0x8b90b51a;
PositionX = (ushort) (ExchangeShortBits((PositionX ^ ObjectId ^ 0x2ed6), 15) + 0xdd12);
PositionY = (ushort) (ExchangeShortBits((PositionY ^ ObjectId ^ 0xb99b), 11) + 0x76de);
}
Run Code Online (Sandbox Code Playgroud)
ExchangeShortBits
private static uint ExchangeShortBits(uint data, int bits)
{
data &= 0xffff;
return (data …Run Code Online (Sandbox Code Playgroud) 我怎么说我想要一个接口是一个或另一个,但不是两者兼有?
interface IFoo {
bar: string /*^XOR^*/ can: number;
}
Run Code Online (Sandbox Code Playgroud)