问题标签 [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.
c++ - 具有快速插入+删除和部分反转的良好数据结构是什么?
我正在用 C++ 编写算法,为此我需要一个数据结构来存储一系列n
数据点。也就是说,我想存储元素v[0],v[1],...,v[n-1]
。我确实关心订单。
我想要快速的操作是:
- 顺序访问(即访问
v[0]
、 thenv[1]
等,并具有编辑值的能力); 点重定位,即
{v[0],v[1],...,v[i],v[i+1],...,v[j-1],v[j],v[j+1],...,v[n-1]}
->{v[0],v[1],...,v[i],v[j],v[i+1],...,v[j-1],v[j+1],...,v[n-1]}
;部分反转,即
{v[0],...,v[i],v[i+1],...,v[j-1],v[j],v[j+1],...,v[n-1]}
->{v[0],...,v[i],v[j],v[j-1],...,v[i+1],v[j+1],...,v[n-1]}
。
看来,我可以使用XOR-linked list来实现我的算法,并且它会给出最小的复杂度(上面的操作将是O(1)
,给出O(n^2)
我的算法)。但我知道,异或链表被认为是“丑陋的数据结构”([1],[2])。
有什么比这更好的数据结构?更准确地说,有没有其他常用的数据结构,O(1)
及时实现这些操作?
java - Java中的简单按位运算
我正在使用短类型变量在 Java 中编写代码。短变量通常是 16 位,但不幸的是 Java 没有无符号原始类型,所以我使用低 15 位而不是忽略符号位。请不要建议对这部分进行更改,因为我在这个实现中已经很远了......这是我的问题:
我有一个需要异或的变量。
在 C++ 中我只会写
但是,在 Java 中,我还必须处理符号位,所以我试图更改我的掩码,以便它不会影响 xor ...
这没有达到预期的效果,我不知道为什么。任何人都可以看到我要去哪里错了吗?
问候。
编辑:好的,你们是对的,那一点没有引起问题。
当我向左移动位时,问题就出现了。
我不小心将位移入符号位。
mysignedshort = mysignedshort << 1;
任何想法如何避免这个新问题,以便如果它转移到 MSB 则什么都不会发生?还是我应该做一个手动测试?虽然代码中有很多这种变化,所以我更喜欢更简洁的解决方案。
问候。
php - 按位异或两个变量
我有两个变量:$a
并且$b
,我想得到它们的 XOR。
为什么它给我'1001000111100000001100010001'而不是'11110110111000011111110011101110'?
c - 相反符号的按位相加
该程序输出 -12。我不明白怎么做。请解释。
这个 no 似乎大于 -12 并且是 +ve。但是我是如何将 o/p 设为 -12 的?
prolog - 使用 Prolog CLPFD 实现 32 位数字的 XOR 函数
我尝试在 Prolog CLPFD 中实现高效的异或(XOR)。这应该是简单的谓词,例如:
A
, B
,AxorB
是自然数(0)并且AxorB
是A
xor B
的结果。
我的主要问题是效率。首先,如果不将这些数字分解为可以进一步处理/约束的单独部分,我无法找到对两个数字进行异或运算的任何方法,并且打破这些数字的过程(创建适当的约束然后解决它们)需要一些处理时间。其次,除了下面的第二个代码之外,我无法想出任何有效的方法来“模拟”自然数上的 XOR 函数。
让我们从我的第一个代码开始。这是可能的最简单的 XOR 实现,它仅适用于 1 位值(0 和 1):
要将其用于大于 1 的数字,必须将数字分解为位:
样本输入和输出:
现在,这对我的目的来说太慢了,因为在我的代码中我有时需要猜测A
,B
当我知道AxorB
所有这些应该是 32 位数字的位置时。对于需要超过 10 位的数字,这会变成数百万个似乎呈指数增长的推论。我使用最好的标记策略、XOR 参数交换和其他技巧来加快计算速度。
所以,我试着做一些数学。我设计的是 2 位值(0、1、2、3)的 XOR 函数:
要在大于 3 的数字中使用它,可以使用类似于我之前介绍的代码:
这似乎比第一个代码快了近 50%。但是,两倍的差异对我来说仍然太小了。
所以,我的问题是:我怎样才能为 32 位数字实现有效的 XOR?如果这在现代机器上是不可能的,并且您可以通过某种计算来证明它,那么这也是我问题的一个很好的答案。最终,我怎样才能最好地改进我的代码?也许您有一些想法如何处理数字而不将它们分开或如何以其他方式对数字进行异或?
附加信息:如果您碰巧尝试我的代码从三个参数中猜测两个或 XOR,那么由于可以自由交换该函数的参数(来自其数学属性),我建议设置A
为绑定变量和B
未AxorB
绑定. CLPFD 似乎以这种方式工作得最快。此外,最好的标签策略是labeling([bisect], [B,AxorB]
.
javascript - 十六进制颜色代码的按位补码总是返回 6 个字符吗?
在 Javascript 中,有没有办法让十六进制颜色的按位补码总是返回一个 6 个字符的字符串?
例如,('0xff0537' ^ '0xffffff').toString(16)
生成 4 个字符的字符串'fac8'
。
但是, a('0x00adeb' ^ '0xffffff').toString(16)
返回一个 6 个字符的字符串'ff5214'
。
matlab - 如何在matlab中将Bitxor表示为mod
我想一起实现异或。例如,我有两个位对,分别是 6 (110) 和 3 (011)。现在我想实现两个输入的按位异或。它可以通过matlab中的bitxor函数来完成。
但我想通过 mod 函数而不是 bitxor 来实现该方案。matlab怎么做?非常感谢。这是我的代码
c - 如何检查 RFID 标签的校验和
按照这些步骤,我编写了函数来检查我扫描的标签的值是否正确,但它总是返回 false。这是我的功能:
我究竟做错了什么?
我已经手动完成了二进制值的异或,以检查我扫描的值是否有效。
已编辑
上面的代码不起作用,因为它在每对的末尾没有'\0'。解决了这个问题,我的代码在 CodeBlocks 中工作,但在我需要它工作的 Vinculum II IDE 中,总是返回 false。这是我尝试过的版本列表:
我这样调用函数:
java - XOR 交换是否在所有情况下都等同于传统交换?
下面是一种执行“就地”字符串反转的方法,即 Black Cat 变为 Cat Black。在第二个交换部分,如果使用传统交换(已注释掉),则所有测试都通过,但是如果使用 XOR 交换,则只有一个测试通过。
难道不能简单地“交换”
至
方法
测试
失败的输出
php - 在 php 5.4 中异或 3 个数字
我有这个第一位数字
我正在尝试从第一个数字中异或这 3 位
我正在做
但它应该返回时返回空
编辑:这给了我我想要的,有更好的方法吗?