整数除法运算符与强制转换正态除法的结果有什么不同吗?
考虑以下Dart代码:
void main() {
int a = 10;
int b = 3;
int result = a~/b;
int result2 = (a/b).toInt();
}
这两个表达式编译成相同的机器码吗?我假设答案是:
答:是的,但这只是因为编译器足够聪明,可以重写第二个表达式。
B)是的,因为没有实际的区别而且第一个表达式是第二个的简写。
或者C)否,因为在CPU级别执行计算的方式不同,编译器不会为您优化。
1条答案
按热度按时间hrirmatl1#
x ~/ y
不等效于(x / y).toInt()
。整数运算(包括除法)明显快于浮点运算。如果
x ~/ y
更快,那么编译器不能自动进行转换吗?也许可以,但这样的转换不会总是生成相同的结果,因此不一定合适。整数除法通常用于操作数为整数的情况。(也就是说,当你在整数域中开始,并想留在整数域中时)如果操作数是整数,则由于int
(用于Dart VM的64位有符号整数)和double
(IEEE-754双精度浮点数,其有效数具有53位精度)之间的精度差异,这两个运算可以生成不同的结果:最后,
(x / y).toInt()
的读写操作比x ~/ y
更麻烦,尤其是当它是更复杂的算术表达式的一部分时。