Dart语言中的^运算符是什么?



我注意到了以前从未见过的运算符^。它被用于计算哈希码,详情见下文。下面是一个代码片段,检查hashcode部分,我看到:

import './color.dart';
import './colors.dart';
class CoreState {
final int counter;
final Color backgroundColor;
const CoreState({
this.counter = 0,
this.backgroundColor = Colors.white,
});
CoreState copyWith({
int? counter,
Color? backgroundColor,
}) =>
CoreState(
counter: counter ?? this.counter,
backgroundColor: backgroundColor ?? this.backgroundColor,
);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is CoreState &&
runtimeType == other.runtimeType &&
counter == other.counter &&
backgroundColor == other.backgroundColor;
@override
int get hashCode => counter.hashCode ^ backgroundColor.hashCode;

@override
String toString() {
return "counter: $countern"
"color:$backgroundColor";
}
}

Dart Language Tour解释了^bitwise XOR。这个运算符通常用于计算哈希码。为什么在Java hascode中经常使用异或?

^运算符在Dart中表示异或。

详细信息请查看

在Dart中,^操作符是一个用户可定义的操作符。

它的传统用法是整数和布尔值的异或(XOR)。

var x = 170;
x = x ^ 85;
print(x); // 255;
x ^= 85;  // Same meaning as `x = x ^ 85;`.
print(x); // 170

var oddity = false;
for (var number in someNumbers) {
oddity ^= element.isOdd;
}
// True if an odd number of numbers are odd.

您也可以在自己的类上实现^操作符。例如,BigIntInt32x4类具有类似的基于xor的含义。

你也可以用它来做其他事情,比如矩阵求幂:

class Matrix {
// ...
Matrix operator ^(int power) {
RangeError.checkNotNegative(power, "power");
if (this.height != this.width) {
throw UnsupportedError("Can only do exponents of square matrices");
}
var result = Matrix.identity(this.height);
while (power > 0) { // Can be made more efficient!
result *= this;  
power -= 1;
}
return result;
} 
}
...
var matrix = otherMatrix ^ 2;

操作符的优先级始终相同(仅在&|之间)。

相关内容

  • 没有找到相关文章

最新更新