Int64% Int32 дает результат Int64 - PullRequest
0 голосов
/ 18 февраля 2019
long longVar = 100_000_000_000;
int intVar = int.MinValue;
long result = longVar % intVar;

В этом примере почему результат должен быть длинным?Он не может быть больше Int32.MaxValue, почему было решено сделать остаток Int64 в этой операции?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Потому что, если вы попытаетесь использовать Int32, в этой ситуации будет OverflowException (возможно).И есть какие-то моменты, в которые будут брошены большие объекты.Например:

int firstNumber = 10;
long secondNumber = 100;
var result = firstNumber + secondNumber;

(результат - длинный) Если вы мне не верите, вы можете проверить.

Это происходит из-за автоматического приведения к типу параметра определенного метода.В вашем случае это «%».В случае знака «+» вы можете переопределить оператор и указать собственную реализацию этого оператора.

0 голосов
/ 18 февраля 2019

В соответствии со спецификацией C # для целочисленных типов предопределены только следующие операторы остатка:

int operator %(int x, int y);
uint operator %(uint x, uint y);
long operator %(long x, long y);
ulong operator %(ulong x, ulong y);

Следовательно, в вашем случае компилятор выбирает версию long(long, long) и выполняет приведение intVar до long автоматически.Тогда результат имеет тип long.

...