Java有一个逻辑AND运算符.
Java有一个逻辑OR运算符.
Java有一个逻辑NOT运算符.
据sun称,Java没有逻辑XOR运算符.我想定义一个.
作为一种方法,它只是定义如下:
public static boolean logicalXOR(boolean x, boolean y) {
return ( ( x || y ) && ! ( x && y ) );
}
Run Code Online (Sandbox Code Playgroud)
以下列方式调用此方法:
boolean myVal = logicalXOR(x, y);
Run Code Online (Sandbox Code Playgroud)
我宁愿有一个运算符,使用如下:
boolean myVal = x ^^ y;
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于如何在Java中定义新运算符的内容.我应该从哪里开始?
由于其简洁性,我个人喜欢在布尔检查的上下文中有意义的,或者,^运算符.我更喜欢写作
if (boolean1 ^ boolean2)
{
//do it
}
Run Code Online (Sandbox Code Playgroud)
比
if((boolean1 && !boolean2) || (boolean2 && !boolean1))
{
//do it
}
Run Code Online (Sandbox Code Playgroud)
但是我常常从其他有经验的Java开发人员(不仅仅是新手)那里得到一些困惑,有时会评论它应该如何仅用于按位操作.
我很好奇关于^运营商使用的最佳实践.
假设您有两个哈希H(A)并且H(B)您想要将它们组合在一起.我已经读到了将两个哈希值组合在一起的好方法XOR,例如XOR( H(A), H(B) ).
我发现的最佳解释在这里简要介绍了这些哈希函数指南:
对具有大致随机分布的两个数字进行异或,导致另一个数字仍具有大致随机分布*,但现在取决于这两个值.
...
*在两个数字相结合的每个比特,一个输出0,如果两个比特相等,否则为1.换句话说,在组合的50%,1将输出.因此,如果两个输入位各有大约50-50的机会为0或1,那么输出位也是如此.
你能解释为什么XOR应该是组合散列函数(而不是OR或AND等)的默认操作的直觉和/或数学吗?
我发现这个代码使用XOR ^运算符交换两个数字而不使用第三个变量.
码:
int i = 25;
int j = 36;
j ^= i;
i ^= j;
j ^= i;
Console.WriteLine("i:" + i + " j:" + j);
//numbers Swapped correctly
//Output: i:36 j:25
Run Code Online (Sandbox Code Playgroud)
现在我将上面的代码更改为此等效代码.
我的代码:
int i = 25;
int j = 36;
j ^= i ^= j ^= i; // I have changed to this equivalent (???).
Console.WriteLine("i:" + i + " j:" + j);
//Not Swapped correctly
//Output: i:36 j:0
Run Code Online (Sandbox Code Playgroud)
现在,我想知道,为什么我的代码输出不正确?
为什么C#没有条件XOR运算符?
例:
true xor false = true
true xor true = false
false xor false = false
Run Code Online (Sandbox Code Playgroud) Java中有XOR功能 - a^b
举个例子: 5^3 = 6
你能告诉我反函数吗?如果我有6,3我可以获得包含数字的数字范围5吗?
有人可以向我解释如何在没有临时变量的情况下对两个变量进行XOR交换吗?
void xorSwap (int *x, int *y)
{
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
Run Code Online (Sandbox Code Playgroud)
我明白它做了什么,但有人可以告诉我它是如何工作的逻辑吗?
我试图理解C#中的二元运算符,或者一般,尤其是^ - exclusive或.
例如:
给出一组正整数.除了一个出现奇数次数的数字之外,所有数字都出现偶数次.在O(n)时间和恒定空间中找到数字.
这可以通过^完成,如下所示:对所有元素进行按位异或.最后我们得到奇数出现的数字.
它是如何工作的?
当我做:
int res = 2 ^ 3;
res = 1;
int res = 2 ^ 5;
res = 7;
int res = 2 ^ 10;
res = 8;
Run Code Online (Sandbox Code Playgroud)
实际发生了什么?还有什么其他的魔法?我可以查阅任何参考资料并了解更多信息吗?
我写了一个简短的C++程序来对一个文件进行XOR加密,我可以将它用于一些个人文件(如果它被破解它没什么大不了的 - 我只是在防范偶然的观众).基本上,我使用ASCII密码并使用文件中的数据重复XOR密码.
但现在我很好奇:如果有人想破解这个问题,他们会怎么做呢?需要很长时间吗?它取决于密码的长度(即什么是大O)?
xor ×10
java ×3
operators ×3
c# ×2
conditional ×1
cryptography ×1
encryption ×1
hash ×1
inverse ×1
javascript ×1
math ×1
probability ×1
security ×1
swap ×1