C# 做什么?

C# 做什么?,c#,operands,C#,Operands,我一直在分析源代码,但我一直在努力理解 在本次评估中,这两者一起做什么 array[i] ^= 5; ^=操作数代表什么? 它在这样做吗 array[i] = array[i] ^ 5; 谢谢你。这叫做一个。复合赋值运算符的形式为 ω= 其中,ω是一个二进制运算符。复合作业 a ω= b 大致相当于 a = a ω b array[i] = array[i] ^ 5 除了a只计算一次 那么,在你的情况下 array[i] ^= 5 大致相当于 a = a ω b array

我一直在分析源代码,但我一直在努力理解 在本次评估中,这两者一起做什么

array[i] ^= 5;  
^=
操作数代表什么? 它在这样做吗

array[i] = array[i] ^ 5;
谢谢你。

这叫做一个。复合赋值运算符的形式为

ω=
其中,
ω
是一个二进制运算符。复合作业

a ω= b
大致相当于

a = a ω b
array[i] = array[i] ^ 5

除了
a
只计算一次

那么,在你的情况下

array[i] ^= 5 
大致相当于

a = a ω b
array[i] = array[i] ^ 5
但要保证
数组[i]
只计算一次:

using System.Console;

class MainClass
{
    static int[] A() { Write("A"); return new int[] { 23 }; }
    static int   B() { Write("B"); return 0; }
    static int   C() { Write("C"); return 42; }

    public static void Main()
    {
        WriteLine("Compound Assignment:");
        A()[B()] += C();
        // ABC

        WriteLine("\nExplicit Assignment:");
        A()[B()] = A()[B()] + C();
        // ABABC
    }
}
这被称为一个。复合赋值运算符的形式为

ω=
其中,
ω
是一个二进制运算符。复合作业

a ω= b
大致相当于

a = a ω b
array[i] = array[i] ^ 5

除了
a
只计算一次

那么,在你的情况下

array[i] ^= 5 
大致相当于

a = a ω b
array[i] = array[i] ^ 5
但要保证
数组[i]
只计算一次:

using System.Console;

class MainClass
{
    static int[] A() { Write("A"); return new int[] { 23 }; }
    static int   B() { Write("B"); return 0; }
    static int   C() { Write("C"); return 42; }

    public static void Main()
    {
        WriteLine("Compound Assignment:");
        A()[B()] += C();
        // ABC

        WriteLine("\nExplicit Assignment:");
        A()[B()] = A()[B()] + C();
        // ABABC
    }
}

是的,这就是它的意思我不明白,不是应该是比较运算符吗?像
(true^false)
会返回true,而
(true^true)
会返回false?
数组[i]^5
是如何工作的
5
在这里不能被视为布尔值:s^是按位异或运算符。它对布尔数和整数都有效。更多信息,请参阅。是的,这就是它的意思。我不明白,^不应该是比较运算符吗?像
(true^false)
会返回true,而
(true^true)
会返回false?
数组[i]^5
是如何工作的
5
在这里不能被视为布尔值:s^是按位异或运算符。它对布尔数和整数都有效。有关详细信息,请参阅。
a
在这两种情况下仅计算一次。我想不出一个运算符在哪里它们不完全(不只是大致)等价。那么为什么C♯ 设计师们觉得不仅需要明确说明,甚至需要在整个段落中对其进行说明:“如果所选运算符的返回类型隐式转换为
x
类型,则该操作的计算结果为
x=x op y
,但
x
仅计算一次。否则,如果所选运算符是预定义运算符,如果所选运算符的返回类型可显式转换为
x
类型,如果
y
可隐式转换为
x
类型,或者该运算符是移位运算符,则该操作的计算结果为
x=(T)(x op y)
,其中,
T
x
的类型,但
x
仅计算一次。“术语“仅计算一次”是指在
x op y
的计算中,
x
的任何组成表达式的结果被临时保存,然后在执行
x
赋值时重新使用。例如,在赋值
A()。“事实上,我的阅读方式有所不同。对我来说,第一段听起来像是独立的,它指定了绑定发生的时间,以及如果左侧表达式是动态的,返回类型是什么。它说:“下面描述的解析将根据运行时类型在运行时进行”,这对我来说表明,该段下面的任何内容都将发生,而不管该类型是否为动态的,只是在不同的时间。我从那一节中编写了这个示例,它似乎验证了我的解释:
a
在这两种情况下只计算一次。我想不出一个运算符在哪里它们不完全(不只是大致)等价。那么为什么C♯ 设计师们觉得不仅需要明确说明,甚至需要在整个段落中对其进行说明:“如果所选运算符的返回类型隐式转换为
x
类型,则该操作的计算结果为
x=x op y
,但
x
仅计算一次。否则,如果所选运算符是预定义运算符,如果所选运算符的返回类型可显式转换为
x
类型,如果
y
可隐式转换为
x
类型,或者该运算符是移位运算符,则该操作的计算结果为
x=(T)(x op y)
,其中,
T
x
的类型,但
x
仅计算一次。“术语“仅计算一次”是指在
x op y
的计算中,
x
的任何组成表达式的结果被临时保存,然后在执行
x
赋值时重新使用。例如,在赋值
A()。“事实上,我的阅读方式有所不同。对我来说,第一段听起来像是独立的,它指定了绑定发生的时间,以及如果左侧表达式是动态的,返回类型是什么。它说:“下面描述的解析将根据运行时类型在运行时进行”,这对我来说表明,该段下面的任何内容都将发生,而不管该类型是否为动态的,只是在不同的时间。我将该部分中的示例编码,它似乎验证了我的解释: