时间:2019-03-17 标签:c#xorfunction

发布于 2024-11-29 14:44:25 字数 481 浏览 3 评论 0原文

我发现这段代码使用 or 运算符反转字符串,

public static string ReverseXor(string s)
{

      if (s == null) return null; 
      char[] charArray = s.ToCharArray(); 
      int len = s.Length - 1;

      for (int i = 0; i < len; i++, len--)
      { 
            charArray[i] ^= charArray[len]; 
            charArray[len] ^= charArray[i]; 
            charArray[i] ^= charArray[len]; }

       //some more code
}

问题是我不明白 for 循环内发生了什么,有人可以向我解释一下吗?

谢谢。

I found this code to reverse a string using the or operator,

public static string ReverseXor(string s)
{

      if (s == null) return null; 
      char[] charArray = s.ToCharArray(); 
      int len = s.Length - 1;

      for (int i = 0; i < len; i++, len--)
      { 
            charArray[i] ^= charArray[len]; 
            charArray[len] ^= charArray[i]; 
            charArray[i] ^= charArray[len]; }

       //some more code
}

The problem is I'm not understand in what's happening inside the for loop, can someone explain this to me?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

以下是如何在没有临时中间变量的情况下交换两个值 A、B:

A = A Xor B
B = A Xor B
A = A Xor B

参考:XOR 交换算法

这是一个 8 位示例:

A = 10010010
B = 01111001

A = A Xor B = 11101011
B = A Xor B = 10010010
A = A Xor B = 01111001

Here's how you can swap two values A, B without a temporary intermediate variable:

A = A Xor B
B = A Xor B
A = A Xor B

Ref: XOR swap algorithm

Here's a 8 bit example:

A = 10010010
B = 01111001

A = A Xor B = 11101011
B = A Xor B = 10010010
A = A Xor B = 01111001
做个少女永远怀春 2024-12-06 14:44:25

该方法使用“老技巧”来交换变量,仅此而已,它等于:

char temp = charArray[i];
charArray[i] = charArray[len];
charArray[len] = temp;

它用于仅创建新变量“temp”来进行交换。

The method uses "old trick" to swap variables that is all, it is equals to:

char temp = charArray[i];
charArray[i] = charArray[len];
charArray[len] = temp;

It is used to just elemenate the creation of new variable "temp" to do the swap.

冷夜 2024-12-06 14:44:25

我认为看待这个问题的方式可以分为两部分。循环在做什么?循环的内部部分在做什么?

循环着眼于绳子的末端,绳子的末端预先向内移动到中心。

循环的内部部分正在执行异或交换。这是一个在没有第三个变量的情况下交换两个变量的技巧。使用一些布尔逻辑来查看它正在做什么。

The way to look at this, I think, is in two parts. What is the loop doing? And what is the inner part of the loop doing?

The loop is looking at the ends of the string, which pregresively move inwards towards the center.

The inner part of the loop is doing an xor swap. This is a trick to swap two variables without a third variable. Look at whet it is doing using some boolean logic.

美人迟暮 2024-12-06 14:44:25

这是臭名昭著的异或交换算法

下面交换XY的值:

X := X XOR Y
Y := X XOR Y
X := X XOR Y

详细信息请参见维基百科文章。

It's the infamous XOR swap algorithm.

The following exchanges the values of X and Y:

X := X XOR Y
Y := X XOR Y
X := X XOR Y

See Wikipedia the article for details.

孤城病女 2024-12-06 14:44:25

这有点诡计。 XOR 运算符可用作位掩码来临时组合两个值。 X 与 Y 进行异或两次将得到 Y。您可以使用真值表轻松证明这一点。

在这种情况下,异或被用作交换。

It's a bit of trickery. The XOR operator can be used as a bit mask to temporarily combine two values. XOR-ing X twice against Y will give Y. You can prove this easily with truth tables.

In this case, the XOR is being used as a swap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文