2015-01-12 6 views
0

Я не уверен, что «зажим» является правильной терминологией для этого, однако я действительно не знаю, что еще назвать. Предположим, мы хотели ограничить целое число, чтобы оставаться в пределах некоторого произвольного диапазона, например 0-50. Это можно легко достичь, проверив текущее значение с помощью оператора if и соответствующим образом присвоив максимальное или минимальное значение. Однако каков самый быстрый способ сохранить Integer в максимальном значении или минимальном значении?Самый быстрый способ сжать целое

+0

http://stackoverflow.com/a/3176617/442444 – CarbineCoder

+0

Если встроенная функция - это то, что вы ищете, зажимаете на C#, это может быть недоступно. Его безопасно использовать эти абстракции, чтобы служить вашей цели, не беспокоясь о узком месте Performance. – CarbineCoder

+0

Проверка против минимума и/или max в конечном итоге, как правило, собирается «скомпилировать» до целочисленной команды сравнения и перехода на CPU, которая составляет около 5-10 тактов или меньше. Почему вы заботитесь о тактовых циклах на этом уровне. Разумеется, гораздо важнее сделать ваш код читаемым и более легким в обслуживании, а затем использовать какой-нибудь причудливый смещение бит-бит или булевскую маскировку, которая экономит вам 1 такт. –

ответ

4

Как легко, как

var normalized = Math.Min(50, Math.Max(0, value)); 

По производительности:

public static int Max(int val1, int val2) { 
    return (val1>=val2)?val1:val2; 
    } 

Вот как это implemented in .NET, так что маловероятно, что вы можете реализовать его еще лучше.

+0

И это, как известно, самый быстрый? Я ожидал какого-то причудливого смещения или чего-то еще. – Krythic

+4

«Самый быстрый» по сравнению с чем? Абсолютного «лучшего решения» для всего нет. – zerkms

+0

@zerkms - bravo –

Смежные вопросы