标签: xor

在Java中创建"逻辑独占或"运算符

观察:

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中定义新运算符的内容.我应该从哪里开始?

java operators xor

265
推荐指数
10
解决办法
33万
查看次数

185
推荐指数
9
解决办法
7万
查看次数

使用xor运算符进行布尔检查是一种好习惯吗?

由于其简洁性,我个人喜欢在布尔检查的上下文中有意义的,或者,^运算符.我更喜欢写作

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开发人员(不仅仅是新手)那里得到一些困惑,有时会评论它应该如何仅用于按位操作.

我很好奇关于^运营商使用的最佳实践.

java conditional xor bitwise-operators logical-operators

149
推荐指数
8
解决办法
13万
查看次数

为什么XOR是组合哈希的默认方式?

假设您有两个哈希H(A)并且H(B)您想要将它们组合在一起.我已经读到了将两个哈希值组合在一起的好方法XOR,例如XOR( H(A), H(B) ).

我发现的最佳解释在这里简要介绍了这些哈希函数指南:

对具有大致随机分布的两个数字进行异或,导致另一个数字仍具有大致随机分布*,但现在取决于这两个值.
...
*在两个数字相结合的每个比特,一个输出0,如果两个比特相等,否则为1.换句话说,在组合的50%,1将输出.因此,如果两个输入位各有大约50-50的机会为0或1,那么输出位也是如此.

你能解释为什么XOR应该是组合散列函数(而不是OR或AND等)的默认操作的直觉和/或数学吗?

hash cryptography bit-manipulation probability xor

135
推荐指数
5
解决办法
5万
查看次数

使用此复合形式时,为什么使用XOR交换值失败?

我发现这个代码使用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# swap xor

76
推荐指数
3
解决办法
4716
查看次数

有条件的XOR?

为什么C#没有条件XOR运算符?

例:

true  xor false = true
true  xor true  = false
false xor false = false
Run Code Online (Sandbox Code Playgroud)

c# operators xor boolean-operations

74
推荐指数
6
解决办法
7万
查看次数

XOR的反函数是什么?

Java中有XOR功能 - a^b

举个例子: 5^3 = 6

你能告诉我反函数吗?如果我有6,3我可以获得包含数字的数字范围5吗?

java xor inverse

71
推荐指数
4
解决办法
7万
查看次数

XOR变量交换如何工作?

有人可以向我解释如何在没有临时变量的情况下对两个变量进行XOR交换吗?

void xorSwap (int *x, int *y)
{
    if (x != y) {
        *x ^= *y;
        *y ^= *x;
        *x ^= *y;
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白它做了什么,但有人可以告诉我它是如何工作的逻辑吗?

language-agnostic bit-manipulation xor

68
推荐指数
8
解决办法
2万
查看次数

按位XOR(异或)是什么意思?

我试图理解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)

实际发生了什么?还有什么其他的魔法?我可以查阅任何参考资料并了解更多信息吗?

language-agnostic math bit-manipulation operators xor

55
推荐指数
5
解决办法
7万
查看次数

XOR加密有什么问题?

我写了一个简短的C++程序来对一个文件进行XOR加密,我可以将它用于一些个人文件(如果它被破解它没什么大不了的 - 我只是在防范偶然的观众).基本上,我使用ASCII密码并使用文件中的数据重复XOR密码.

但现在我很好奇:如果有人想破解这个问题,他们会怎么做呢?需要很长时间吗?它取决于密码的长度(即什么是大O)?

security encryption xor

52
推荐指数
6
解决办法
5万
查看次数