другие уже дали отличные ответы.Если вы хотите, чтобы ваша шкала была целым числом (что имеет смысл, если ваш n уже является целым числом), вы можете сделать
int scale = ((255 * n)/1024);
Обратите внимание, что у вас не возникнет никаких проблем с этим, пока этиявляются числами, так как n * 255 всегда будет помещаться в int, когда максимальное n = 1024.
более гибким будет
int scale(int value, int old_max, int new_max){
java.math.BigInteger big_value = java.math.BigInteger.valueOf(value);
java.math.BigInteger big_old_max = java.math.BigInteger.valueOf(old_max);
java.math.BigInteger big_new_max = java.math.BigInteger.valueOf(new_max);
java.math.BigInteger mult = big_value.multiply(big_old_max);
return (int) mult.devide(big_new_max).doubleValue();
}
Вы не переполните никакие целые таким образом,хотя я признаю, что это немного многословно
Редактировать:
В основном то же самое, но менее неуклюже (хотя для очень больших чисел вы можете столкнуться с некоторыми ошибками прецизионности)
int scale(int value, int old_max, int new_max){
double factor = (double) new_max / (double) old_max;
return factor * value;
}