在C#中的位运算赋值操作符

3

|=&= 这样的运算符在 ints 和 longs 上作为位运算符起作用...

int a = 123;
int b = 234;
a |= b;
Console.WriteLine(a); // outputs 251

但是在布尔类型中,它是一个逻辑操作:

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

当使用^=&=|=操作符作用于不同的数据类型时,它们如何决定使用哪种操作方式?


1
但是对于布尔值,它是一个逻辑操作:嗯,没错。但是布尔值只有一位比特,所以按位或(bit-wise OR)与逻辑或(logical OR)是相同的。 - Rob
1个回答

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

1
泛型的情况怎么办?例如 Foo<T>(T a, T b) { a |= b; } - PorkWaffles
2
@PorkWaffles:你会得到一个编译错误,因为 T 没有限制在一个保证处理 | 运算符的接口/类型上。 "Operator '|=' cannot be applied to operands of type 'T' and 'T'" - Joel B Fant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接