Dart中整数除法运算符是否必要?与普通除法转Int有何差异?
Dart整数除法
~/与除法转整数的差异及编译结果 核心功能差异
a~/b和(a/b).toInt()存在本质语义差异:
~/是原生整数除法运算,结果向负无穷方向取整。例如(-10)~/3的结果是-4。(a/b)会先将整数转为浮点数执行除法,再调用toInt(),这个方法是向零方向取整。比如(-10)/3得到-3.333...,转整数后结果为-3。
编译后机器码的差异
针对给出的选项,正确答案是C) 不同,因为CPU层面的计算方式存在差异,且编译器不会对此进行优化。
具体原因:
~/直接调用CPU的整数除法指令,全程操作整数类型数据,无需额外类型转换步骤。(a/b).toInt()会先触发浮点数除法指令,完成整数到浮点数的转换与计算后,再执行浮点数转整数的指令,CPU执行的操作链完全不同。- Dart编译器不会将后者优化为前者,因为二者的取整逻辑不同,优化会直接改变程序的运行结果。
代码验证示例
void main() { int a = -10; int b = 3; int result = a~/b; // 输出-4 int result2 = (a/b).toInt(); // 输出-3 print(result); print(result2); }
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

