Dart 赋值运算符

1、基础赋值运算符 =

将右侧表达式的值存入左侧变量,覆盖原有值。

用法:

变量 = 值或表达式;
int age;
age = 10;        // 把 10 赋值给age
String name;
name= "sam"; // 字符串赋值Code language: JavaScript (javascript)

2、空感知赋值运算符 ??=

仅当左侧变量值为 null 时,才执行赋值;变量不为 null 则保持原值不变。

用法:

变量 ??= 值;

相当于:

if (变量 == null) {
  变量 = 值;
}Code language: JavaScript (javascript)

例子:

void main() {
	int? total = null;
	total ??= 5;
	print(total); // 输出 5,total原本为null,赋值生效

	int? count = 100;
	count ??= 200;
	print(count); // 输出 100,count不为null,赋值不生效
}Code language: PHP (php)

3、复合赋值运算符

运算 + 赋值一体

对于任意运算符 op

a op= b 等价于 a = a op b

分类运算符含义
基础四则+=相加后赋值
-=相减后赋值
*=相乘后赋值
/=相除(浮点)后赋值
整除~/=整除后赋值(取整数)
取余%=取模(余数)后赋值
位左移<<=左移后赋值
位右移>>=右移后赋值
无符号右移>>>=无符号右移后赋值
按位与&=按位与后赋值
按位异或^=按位异或后赋值
按位或=`
按位或后赋值
对于算符操作op= ba = a op b
示例:a += ba = a + b

例子:

void main() {
	var num = 2;

	// *= 乘法复合赋值
	num *= 3; 
	print(num); // 6,等价 num = num * 3

	// += 加法
	num += 4;
	print(num); // 10,等价 num = num + 4

	// -= 减法
	num -= 2;
	print(num); // 8

	// /= 浮点除法
	double d = 10;
	d /= 2;
	print(d); // 5.0

	// ~/= 整数整除
	int n = 7;
	n ~/= 2;
	print(n); // 3

	// %= 取余
	int m = 9;
	m %= 2;
	print(m); // 1

	// <<= 左移
	int bit1 = 1;
	bit1 <<= 2; // 1 << 2 = 4
	print(bit1); // 4

	// >>= 右移
	int bit2 = 8;
	bit2 >>= 2; // 8 >> 2 = 2
	print(bit2); // 2

	// >>>= 无符号右移
	int bit3 = -8;
	bit3 >>>= 2;
	print(bit3); //4611686018427387902 很大的一个数 

	// &= 按位与
	int x = 6; // 110
	x &= 3;    // 011
	print(x);  // 010 = 2

	// ^= 异或
	int y = 5;
	y ^= 3;
	print(y);

	// |= 按位或
	int z = 4;
	z |= 1;
	print(z); // 5
}Code language: PHP (php)

关于,移位,int bit1 = 1; 左移2位,

十进制 1 的 32 位二进制:

00000000 00000000 00000000 00000001

x << n:把 x 的所有二进制位整体向左移动 n 位,右侧空出来的低位补 0,左侧超出的高位直接丢弃。

所以上面,变成了:

00000000 00000000 00000000 00000100

这个二进制就是对应十进制的4

关于逻辑运算符,我们后面会讲解,读者暂且知道这个赋值运算符就可以。这是本节课的重点。

void main() {
  // 1. 基础赋值 =
  var a = 2;
  print(a == 2);

  // 2. 乘法复合赋值 *=
  a *= 3; // a =  a * 3;
  print(a == 6);

  // 3. 加法复合赋值 +=
  a += 4; // a = a + 4;
  print(a == 10);

  // 4. 空感知赋值 ??=
  int? b; // 默认null
  b ??= 20;
  print(b == 20);

  b ??= 99; // b不为null,不修改
  print(b == 20);

  // 5. 减法 -=
  a -= 5;
  print(a == 5);

  // 6. 取余 %=
  a %= 3;
  print(a == 2);
}Code language: Dart (dart)

以上 全部输出true

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注