问题标签 [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.

0 投票
1 回答
280 浏览

c - 在对有符号整数进行 XOR 位取消时如何避免陷阱表示?

作为给定三个数字的建议解决方案,找到其中第二大的数字,我写道:

这个想法是^ smallest ^ largest取消位,以便保留中间数字。

但是,@chux 指出了一个问题:

int和的一个独特问题a ^ b ^ c ^ smallest ^ largest是中间结果可能是罕见的非 2 补码平台上的陷阱表示。– 楚克斯

@chux请解释一下?XOR 只是逐位运算,并不关心位代表什么,对吧?– 200_成功

XOR 不在乎,但结果可能是一个问题:例如,使用符号幅度整数,可能-1 ^ 1-0出现一个陷阱值 - 停止代码。参见 C11 §6.2.6.2 2. 位运算更好地用于无符号类型。– 楚克斯

进一步的 C11 §6.2.6.2 3 在罕见的非 2 的补码平台上指定 ^ 的实现定义行为 int 。特别是“未指定这些情况是否实际生成负零或正常零”,渲染 a ^ b ^ c ^ minimum ^ maximum 未指定即使不使用陷阱值它也会按需要工作。下一节将解释这如何成为 UB。最好将这个新颖的代码留给无符号类型。– 楚克斯

不幸的是,一种在逻辑上和数学上应该是合理的技术可能会因技术性而脱轨。

有没有办法挽救这种 XOR 技术并使其合法安全,理想情况下运行时开销为零?(可能涉及工会的事情?)

0 投票
2 回答
2730 浏览

vb.net - 按位运算 - 检查和删除

请注意下面的简单示例:

我的问题的第一部分与该行有关If (test And Names.Test3) = Names.Test3

If test And Names.Test3简单地检查标志是否存在不是更好吗?如果它评估为非零值(意味着存在标志),那么条件的结果将是True无论如何。

是否有充分的理由使用第一种方式检查第二种方式?(虽然我的答案是针对 VB.NET,但我也想知道这是否是其他任何地方的潜在陷阱,即 C#、C++ 等)。

此外,关于删除标志,似乎有两种方法可以做到这一点:

test = test Xor Names.Test3test = test And Not Names.Test3

但是,如果标志丢失,第一个将添加标志,如果存在则将其删除,而第二个只会将其删除。这是唯一的区别吗?或者还有其他原因为什么我应该更喜欢一种方法而不是另一种?

0 投票
0 回答
73 浏览

c# - C# 面试代码的异或步骤

我通过LinkedIn的链接遇到了这个面试问题,我知道XOR是做什么的,但同时我对位移和类似的东西不满意,如果我不必这样做,我尽量不做事情对我自己来说太复杂了。

但是我真的很想更多地了解这些东西在我将来找到一个好的用例的情况下是如何工作的。

预测以下程序的输出

它给出了输出

x = 0;Y=1975

有人可以将其分解为步骤来解释这行代码中到底发生了什么吗?分配顺序等?

0 投票
6 回答
17097 浏览

c++ - 异或两个二进制字符串c ++

我有两个字符串如下:

但是,当我尝试使用以下代码对它们进行异或(按位)时,输出为空白。代码:

任何帮助,将不胜感激。

0 投票
0 回答
160 浏览

bit-manipulation - 按位异或优化和/或/不使用

我正在查看两种不同 MD5 实现的代码,我看到 F(按位三元运算)实现了两种不同的方式:

在 C 中:

在伪中:

我无法理解的是,有人最初是如何想出 f2 的。我本可以自己想出 f1,因为它是当你听到时要编写的逻辑代码(如果 x 则 y 否则 z)——但我无法想出 f2。

需要明确的是 - 我了解f2 在做什么以及 Xor 是如何工作的 - 我只是无法理解某人如何从 f1 转到 f2 .. 他们怎么知道以这种方式使用 xor 是等效的?

我不能仅仅因为它有效而使用某些东西——我想了解它为什么有效。

有人可以“解释数学”吗?
是否有可以使用 Xor 优化 And/Or/Not 的特定规则?

0 投票
2 回答
194 浏览

java - XOR 在 JAVA 中给出意外的输出

我正在尝试在 JAVA 中实现有限域,为此我需要对两个二进制数进行异或。这是我的代码:

变量“溢出”的值为11。当我用溢出 (=11) 对 lastdigitsint 进行异或运算时,输出应该是 1000101。但是,代码输出的是 1095。

有人可以解释为什么会这样吗?谢谢你。

0 投票
1 回答
1110 浏览

c - C中使用64位而不是8位的按位异或

我考虑如何对 2 字节数组进行有效的或运算。我定义了这个字节数组,因为 我认为对它们进行异或运算会快得多。这是真的吗?最好在 XORing 循环内如何有效地转换为这个?如果字节数组% 8 的长度不是 0,如何填充最后一个字节?unsigned char *uint64_tunsigned char *uint64_t *

这是我当前对字节数组进行异或的代码,但每个字节(无符号字符)分别为:

好的,与此同时,我试图这样做。我的 bytes_array 相当大(rgba 位图 4*1440*900?)。

更新:(解决这个问题的第二种方法)

0 投票
5 回答
659 浏览

java - Xor 在交换值时如何工作?

这是原始代码:

我的问题是 Xor 如何在这里交换字符值,为什么这里需要 rev[i++]^=rev[j--] ?

0 投票
1 回答
675 浏览

python - 异或两个十六进制

所以我试图找到一个时间垫的密钥,我有 10 个密文。(明文字母编码为 8 位 ASCII,给定的密文用十六进制编写;我使用的是 python 2.7)

这个想法是,当您对带有空格的字符进行异或运算时,该字符将变为大写或小写,而当您将 x 与 x 异或时,它返回零,因此当我对密文的两个字符异或时,我将密钥与密钥和消息字符异或消息字符。所以我写了这段代码来异或两个十六进制。

当键是偶数时,xor 函数可以正常工作,但是当键是奇数时,它不会返回相同的大写或小写字符。

我究竟做错了什么?

0 投票
1 回答
186 浏览

python - python中的异或逻辑

我已经使用 python(v2) 从hackerearth.com 解决了这个问题

问题陈述:Xor is Mad

我的代码是:

但我有时间超过输入问题:输入#5 到#9

有人可以用不同的方式解决这个问题来管理要在 1 秒内执行的测试吗?