Pourquoi j'obtiens un résultat différent avec le même code?
J'ai écrit du code de fléchettes suivre le code js et il y a un problème, j'espère que quelqu'un pourra m'aider /
code js:
var max = 0x80000000;
var data = -2000;
var mod = data % max;
la valeur du mod est -2000
Code de fléchette:
var max = 0x80000000;
var data = -2000;
var mod = data % max;
la valeur du mod est 2147481648
Pourquoi?
Réponses
Parce que JavaScript et Dart sont des langages différents avec des spécifications d'opérateurs différentes.
Dart spécifie que le résultat de l'opération de reste est toujours positif:
https://api.dart.dev/stable/2.10.4/dart-core/num/operator_modulo.html
En JavaScript le reste peut être négatif, le signe du résultat est égal au signe du dividende:
https://www.ecma-international.org/ecma-262/11.0/index.html#sec-numeric-types-number-remainder
Dart a deux opérateurs "modulo" sur les entiers, %
(aka. Modulo) et remainder
.
Ils diffèrent pour les opérandes négatifs selon que le résultat prend le signe du dividende ou du diviseur. Pour les opérandes positifs, les deux sont d'accord.
Comparer:
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)}");
}
}
}
Ce code montre toutes les combinaisons et cela a == (a ~/ b) * b + a.remainder(b)
en général.