基础二元算术运算符
用于两个数值之间运算,共 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)
以上是++ — 的前缀和后缀的最简单的两个例子。读者可以自行编译运行,感受一下区别。
Previous: 运算符 (Operators)
Next: 关系运算符