C# C语言中的位赋值运算符#

C# C语言中的位赋值运算符#,c#,operators,bit-manipulation,C#,Operators,Bit Manipulation,像|=和&=这样的运算符在整数和长整数上用作位运算符 int a = 123; int b = 234; a |= b; Console.WriteLine(a); // outputs 251 但在bool上,这是一个逻辑操作: bool a = true; bool b = false; a |= b; Console.WriteLine(a); // outputs true 当应用于不同的数据类型时,^=、&=和|=运算符如何决定使用哪种操作?编译器根据所涉及表达式的静态类型来决定。

|=
&=
这样的运算符在整数和长整数上用作位运算符

int a = 123;
int b = 234;
a |= b;
Console.WriteLine(a); // outputs 251
但在bool上,这是一个逻辑操作:

bool a = true;
bool b = false;
a |= b;
Console.WriteLine(a); // outputs true

当应用于不同的数据类型时,
^=
&=
|=
运算符如何决定使用哪种操作?

编译器根据所涉及表达式的静态类型来决定。

泛型的情况如何?像
Foo(ta,tb){a |=b;}
@PorkWaffles:您会得到一个编译错误,因为
T
不限于保证处理
操作符的接口/类型<代码>“运算符“|=”不能应用于“T”和“T”类型的操作数啊,是的,我理解。谢谢:)
但是在bool上,这是一个逻辑操作:
。嗯,是的。但是布尔值是单位的,因此位明智的OR与逻辑OR相同。