问题标签 [bitwise-xor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cryptography - 如何理解密码学中的字符串连接 (||) 和按位异或 ( (+) )
这是一个证明它F
是分组密码的问题。
我想证明 的逆F
,但是我不明白 和 这两个操作||
,(+)
所以我不知道如何简化它。
AES^(-1) (K1,x1(+)x2)
一样x1
AES(K2,X2(+)K1)
_x2
你能帮我吗?
algorithm - 最近谷歌关于按位运算的面试难题
这是谷歌最近的一个面试问题:
我们将 f(X, Y) 定义为 X 和 Y 的二进制表示中不同对应位的数量。例如,f(2, 7) = 2,因为 2 和 7 的二进制表示分别为 010 和 111。第一位和第三位不同,所以 f(2, 7) = 2。
给定一个由 N 个正整数组成的数组,A1, A2 ,..., AN。求所有对 (i, j) 的 f(Ai, Aj) 之和,使得 1 ≤ i, j ≤ N
例如:
A=[1, 3, 5]
我们返回
f(1, 1) + f(1, 3) + f(1, 5) + f(3, 1) + f(3, 3) + f(3, 5) + f(5, 1) + f (5, 3) + f(5, 5) =
0 + 1 + 1 + 1 + 0 + 2 + 1 + 2 + 0 = 8
我可以想到这个解决方案是 O(n^2)
我能想到的另一种方法是(考虑到每个元素只包含一个二进制数字):
- 从数组末尾开始
- 记录到目前为止发现的 1 和 0
- 如果当前元素为 1,那么它将对
count_of_zeros
最终总和有所贡献 - 像这样继续直到我们到达数组的开头。
这种方法是否正确。
excel - 如何使用 Excel 以十六进制格式计算按位异或?
我有两个带有一串位的单元格:
1747F6001E00DB2XXXXX28FE5257645C
和
1C6262C8DBF510F655XXXXXA3BDA58AC
我想将两者异或,这样结果就会像 0B2594C8C5F5CXXXXX190014698D3CF0
.
我知道我需要在 Excel 中使用按位 XOR 运算,因为按位 XOR 计算器可以在线工作,但它们让我可以在十六进制和二进制输入数据之间进行选择。BITXOR 应该可以工作,但它不适用于十六进制输入。
c++ - 查找 XOR 最大的两个元素
我面临一个问题,需要我从给定的整数数组中找到一个元素,该数组的 XOR 与给定的数字是最大的。
例子 :
A[] = {2,7,3,6}; 数字 = 4。
现在,2^4 = 6、7^4 = 3、3^4 = 7、6^3 = 2。因此,3 应该是答案,因为 3^7 是最大值。
我正在尝试遵循类似 trie 的结构并继续逐位查找可能的最大结果,即从 MSB 开始,如果我的位为 1,则我向下遍历 0 侧,如果我的位为 0,则我遍历在节点的 1 侧。我想出了以下代码。
但是我不断遇到分段错误并且无法运行该程序。我已经尝试了所有技巧来调试代码,但我无法找出问题所在。请帮助找出运行时错误的原因。
谢谢
java - 使用二进制文字的按位异或的行为
我很想知道使用二进制文字进行按位比较时实际发生了什么。我刚刚遇到以下事情:
所以一切都按预期运行,xor
比较等于0
。但是,当尝试使用负数时,它将不起作用:
我本来希望最后一个xor
比较也等于0
. 但是,只有当我将二进制文字显式转换为byte
:
对我来说,在比较之前看起来像xor
两者b1
并且0b11111111
具有相同的位表示,所以即使它们被强制转换为int
(或其他东西),xor
应该仍然相等0
。您如何得出二进制表示-256
的结果?11111111 11111111 11111111 00000000
为什么我必须进行显式强制转换byte
才能获得0
?
algorithm - 对于给定的 n,如何从 1..n 中取数字的异或?(例如 1^2^3^...^n)?
这是我遇到的一个面试问题,我知道如何通过反复异或数字来获得蛮力解决方案,但我不知道如何更有效地做到这一点。
我在careercup上看到了这个解决方案:
但是即使有那个家伙的解释,我也不完全理解这里的逻辑,有人可以解释一下如何做到这一点吗?
java - Java:如何在按位异或运算符中评估条件?(^)
我试图评估以下内容:
System.out.println(""+(3!=3 | 2==2 | 3==1));
- 返回 TRUESystem.out.println(""+(3!=3 & 2==2 & 3==1));
- 返回错误System.out.println(""+(3!=3 ^ 2==2 ^ 3==1));
- 返回 TRUE - 如何以及为什么?
我的理解:
将返回 TRUE;基于第二次比较 (
2==2
);但它会做所有的比较;不像||
只做 1 次比较并返回结果将返回假;即使它在第一次比较(
3!=3
)期间得到结果;但它会做所有的比较。不像&&
只做1个比较并返回结果- ? 它如何评估陈述?
c++ - 按位异或以 SIGSEGV 结尾
我有一个函数可以执行简单的按位异或加密。它看起来像这样:
应用程序的输出是:
然后它就死了。我附上gdb
它,发现引发了 SIGSEGV-Exception。
我真的不确定为什么会发生这种情况,对我来说一切似乎都很好。
编辑:更多代码:
循环在第一次运行时直接失败,即i
和j
为 0。
java - 如果给定两个十六进制数,求它们在格雷码中是否可以连续
“连续格雷码”应该是什么意思?我的意思是 10 和 11 在十进制系统中是连续的,但“格雷码连续”是什么意思?我只知道格雷码是一个二进制数字系统,其中两个连续的值只有一位不同。
这是在线解决方案,但我无法理解
我试图理解花费一个小时,但我仍然不知道。
java - 如何正确执行异或运算?
我有一个二进制字符串,我想对该字符串的几个位执行异或运算。我的字符串是:
011001100011100000000011
我正在尝试使用下一行代码执行计算:
我得到的最终奇偶校验结果是:100000。正确的结果应该是:001001。
D29 和 D30 是从之前的计算中进行的奇偶校验位,都是整数。
我做错了什么,我该如何解决?我可能应该将其作为按位运算进行,但我似乎无法弄清楚。任何帮助,将不胜感激。