Почему-то не редко встречаюсь с мнением, что реализация сравнения двух знаковых целых (Int32) делается (или [наиболее] эффективно может быть сделана) с помощью обычной операции вычитания, например:
static int CompareTo(int x, int y) {
return x - y;
}
return x - y;
}
Это не правда. Во-первых, как поведёт себя такая функция сравнения с аргументами:
var compare = CompareTo(Int32.MaxValue, Int32.MinValue);
и, во-вторых (если это не убедительно), посмотрите, наконец, реализацию:
public int CompareTo(int value) {
// Need to use compare because subtraction will wrap
// to positive for very large neg numbers, etc.
if (m_value < value) return -1;
if (m_value > value) return 1;
return 0;
}
// Need to use compare because subtraction will wrap
// to positive for very large neg numbers, etc.
if (m_value < value) return -1;
if (m_value > value) return 1;
return 0;
}
Странно, первый раз вижу чтобы вычитанием сравнение делали :) Интересные вас люди окружают :)
ОтветитьУдалитьЯ, кажется, читал об этом в какой-то книжке, только вот сейчас не сумел отыскать в какой. Ну и остальные видать тоже её же читали.
ОтветитьУдалить