gpt4 book ai didi

c++ - Xor -> And -> Xor 做什么?

转载 作者:行者123 更新时间:2023-11-30 00:37:51 25 4
gpt4 key购买 nike

我在算法方面遇到了问题。

我有一个用于 IO 的字节,可以使用称为 XorAndXor 的方法设置其中的某些位。该算法的工作原理如下:

newValue = (((currentValue XOR xorMask1) AND andMask) XOR xorMask2)

描述如下:

If both xor-masks have the same value then this function inserts the bits of the xor-mask into the bit locations where the and-mask is 1. The other bits remain unchanged.

所以我对这个函数的期望是当我有以下字节时:00101101 并且我将 01000000 用于异或掩码和与掩码,即只有第二位会被设置为 1,结果将是 01101101

但是,在进行数学运算和执行函数时,结果是 00000000

我哪里做错了,或者这个函数有什么我不明白的地方?这种低级编程已经有一段时间了,所以我真的不知道这是否是一种经常使用的方法以及为什么以及如何使用它。

我只想问这个简单的问题:有没有一种方法可以有效地使用此函数来设置(或取消设置/更改)单个位(无需特别询问当前值)? p>

例如:当前值为00101101(我不知道这个),但我只是想确保第二位被设置,所以结果必须是 01101101

重要信息 在我的文档 PDF 中,XOR 和第一个 xorMask1 之间似乎有一点空间,所以这可能是 ~! 或其他一些否定符号可能已经存在,并且很可能由于一些奇怪的编码问题而丢失。所以我将测试该函数是否按照文档所述或函数声明所述进行操作。戴好你的 Helm ,结果会发回(请打鼓)......

最佳答案

     00101101 
XOR 01000000
-------------
01101101
AND 01000000
-------------
01000000
XOR 01000000
-------------
00000000

文档不正确。这不是我第一次看到完全偏离初始实现的实现,但没有人费心去更新文档。

我进行了快速检查,所以我可能是错的,但以下内容与文档一致:

newValue = (((currentValue XOR xorMask1) AND ~andMask) XOR xorMask2)

00101101
XOR 01100100
-------------
01001001
AND 10011011
-------------
00001001
XOR 01100100
-------------
01101101

这是表达式 New = Curr XOR Xor1 AND ~And XOR Xor2 的逻辑表,其中 Xor1 == Xor2

CURR: 0 1 0 1   0 1 0 1 
XOR1: 0 0 1 1 0 0 1 1
AND: 0 0 0 0 1 1 1 1
XOR2: 0 0 1 1 0 0 1 1
-----------------------
NEW: 0 1 0 1 0 0 1 1
---v--- ---v---
same as same as
current xor mask
where where
AND = 0 AND = 1

关于c++ - Xor -> And -> Xor 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com