У меня есть набор кодов клавиш со значениями (конечно, 4), от 0 до 3, соответствующих клавишам вниз, влево, вверх, вправо, в том заказ. Мне нужно преобразовать эти коды ключей в x и y направления, с положительным x, указывающим местоположение слева от начала координат, и положительное y, указывающее местоположение ниже начала координат. Как я понимаю, у меня есть два способа сделать это:самый эффективный способ изменения int в направлении X и Y
с использованием массивов:
int [] dx = {0, -1, 0, 1};
int [] dy = {1, 0, -1, 0};
int x = dx[kc];
int y = dy[kc];
или с помощью арифметического:
int x = (kc%2)*(((kc/2)%2)*2 - 1);
int y = ((kc+1)%2)*(((kc/2)%2)*-2 + 1);
, который был бы более эффективным?
Разница в эффективности очень незначительна. Что вам более читаемо? – Kon
не делайте преждевременной оптимизации, подождите, пока этот метод не появится в вашем профилировщике – Mysterion
Как сказал @Kon, это очень незначительно. Функции памяти немного менее эффективны, поскольку им необходимо получить доступ к памяти, тогда как арифметика обрабатывается в ALU на CPU. Не так уж и важно, что вы должны беспокоиться об этом, если только вы не работаете над проектом, где время выполнения Чрезвычайно важно. –