首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么相同的代码会得到不同的结果?

为什么相同的代码会得到不同的结果?
EN

Stack Overflow用户
提问于 2020-11-19 19:50:36
回答 2查看 53关注 0票数 2

我按照js代码写了一些dart代码,有一个问题,希望有人能帮助我/

js代码:

代码语言:javascript
运行
复制
var max = 0x80000000;
var data = -2000;
var mod = data % max;

mod值为-2000

Dart代码:

代码语言:javascript
运行
复制
var max = 0x80000000;
var data = -2000;
var mod = data % max;

mod值为2147481648

为什么?

EN

回答 2

Stack Overflow用户

发布于 2020-11-19 20:32:51

因为JavaScript和Dart是具有不同运算符规范的不同语言。

Dart指定余数运算结果始终为正:

https://api.dart.dev/stable/2.10.4/dart-core/num/operator_modulo.html

在JavaScript中,余数可以是负的,结果的符号等于被除数的符号:

https://www.ecma-international.org/ecma-262/11.0/index.html#sec-numeric-types-number-remainder

票数 5
EN

Stack Overflow用户

发布于 2020-11-20 00:01:09

Dart在整数上有two "modulo" operators% (也称为.模)和remainder

对于负操作数,它们的不同之处在于结果是取被除数还是除数的符号。对于正操作数,这两个操作数是一致的。

比较:

代码语言:javascript
运行
复制
void main() {
  for (var a in [5, -5]) {
    for (var b in [3, -3]) {
      print("$a ~/ $b         = ${a ~/ b}");
      print("$a % $b          = ${a % b}");
      print("$a.remainder($b) = ${a.remainder(b)}");
      print("$a = $b * ($a ~/ $b) + $a.remainder($b) = ${b * (a ~/ b) + a.remainder(b)}");
    }
  }
}

这段代码显示了所有的组合和一般的a == (a ~/ b) * b + a.remainder(b)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64911104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档