Dart 算术运算符

基础二元算术运算符

用于两个数值之间运算,共 7 种,包含普通四则、整除、取余、负号一元运算符

运算符作用说明
+加法
-减法
-表达式一元负号(取反,反转数值正负)
*乘法
/普通除法,结果永远是 double 浮点型
~/整数除法,舍去小数,返回 int 整型
%取模(取整数除法的余数)

其中除法比较特别,和其他语言比较,它的/结果永远都是浮点数的,如果需要整数,需要~/,如果对于有编程基础的读者,这里就要特别注意。

例子

void main() {
        // 基础四则、整除、取余校验
	print(2 + 3 == 5);
	print(2 - 3 == -1);
	print(2 * 3 == 6);
	print(5 / 2 == 2.5);  // 普通除法输出小数double
	print(5 ~/ 2 == 2);   // 整数除法只保留整数部分int
	print(5 % 2 == 1);    // 取除法余数, % 取模运算符仅获取整数除法的余数;

	// 拼接整除+余数字符串示例
	print('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
}Code language: Dart (dart)

执行结果

自增 / 自减运算符

Dart 支持前缀后缀两种自增 ++、自减 --,核心区别:变量先修改还是先取值

运算符执行逻辑表达式最终返回值
++var先把变量 + 1,再参与运算自增后的新值
var++先拿变量原值参与运算,运算结束后变量 + 1自增前的原值
--var先把变量 – 1,再参与运算自减后的新值
var--先拿变量原值参与运算,运算结束后变量 – 1自减前的原值
void main() {
	int a;
	int b;

	// 1. 前缀自增 ++a:先自增,再赋值
	a = 0;
	b = ++a;
	print(a == b); // a=1,b=1,1 == 1

	// 2. 后缀自增 a++:先赋值,再自增
	a = 0;
	b = a++;
	print(a != b); // a=1,b=0,1 != 0

	// 3. 前缀自减 --a:先自减,再赋值
	a = 0;
	b = --a;
	print(a == b); // a=-1,b=-1,-1 == -1

	// 4. 后缀自减 a--:先赋值,再自减
	a = 0;
	b = a--;
	print(a != b); // a=-1,b=0,-1 != 0
}
Code language: PHP (php)

以上例子都是出true

需要注意的是:++或者–放到前缀和后缀在某些地方是不一样的。

如果单独使用,例如 :

int a = 1;
++a;

int b  = 1;
b++;

print(a);
print(b);Code language: PHP (php)

以上这样写 最终 输出都是2

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
2
2
Code language: CSS (css)

同理,– 也是一样,最终这个变量都会+1 或者-1

但是,如果++ — 是用在一些式子中,例如

void main() {
  int a = 5;
  // 后缀:先取5计算,算完a变成6
  int res1 = a++ * 2;
  print(res1); // 10
  print(a);  // 6

  int b= 5;
  // 前缀:先b变成6,再用6计算
  int res2 = ++b * 2;
  print(res2); // 12
  print(b); // 6
}Code language: PHP (php)

以上 a b还是一样 最终都会增加了1.但是res1和res2 的结果却是不一样。 尽管,只是一点点区别,++放前面或者放后面。

原因是后缀的话 a++ 是先让a的值 进行下一步操作 也就是先执行a*2 =10 这个时候a还是5,赋值给了res1 所以res1就是10. 然后a的值才+1 变成6

而前缀的话,就要先让a的值+1 变成了6,然后再6*2 = 12 res2 就变成了12.

int res1 = a++ * 2; 这里分解后就是:

int res1 = a * 2;
a = a +1;

int res2 = ++b * 2; 这里分解后就是:

a = a+1;
int res1 = a * 2;

有一个口诀:

前缀先变,后缀先用;

前缀返回新值,后缀返回原值。

总结

前缀 ++a / --a先修改变量本身,再把修改后的值拿去参与运算 / 赋值

后缀 a++ / a--先拿变量原来的值参与运算 / 赋值,运算结束后再修改变量

读者:可以试试下面例子

void main() {
  int a = 0;
  int b = ++a; 
  // 步骤1:a = a + 1 → a变成1
  // 步骤2:把修改后的a(1)赋值给b
  print(a); // 1
  print(b); // 1
}Code language: PHP (php)
void main() {
  int a = 0;
  int b = a++;
  // 步骤1:先把a原值0赋值给b
  // 步骤2:再执行a = a + 1 → a变成1
  print(a); // 1
  print(b); // 0
}Code language: PHP (php)
void main() {
  int a = 0;
  int b = --a;
  // 步骤1:a = a - 1 → a变成-1
  // 步骤2:把修改后的a(-1)赋值给b
  print(a); // -1
  print(b); // -1
}Code language: PHP (php)
void main() {
  int a = 0;
  int b = a--;
  // 步骤1:先把a原值0赋值给b
  // 步骤2:再执行a = a - 1 → a变成-1
  print(a); // -1
  print(b); // 0
}Code language: PHP (php)

以上是++ — 的前缀和后缀的最简单的两个例子。读者可以自行编译运行,感受一下区别。

发表回复

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