Вычтите 1 di git целое число - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь написать программу-алгоритм, в которой есть шаг, который включает вычитание целого числа 1 di git на 1.

Что означает: 3 -> 2, 5 -> 4, 0 - > 9, et c.

Мой текущий код:

int subtractByOne(int val) {
    val = val - 1;
    return (val == -1) ? 9 : val;
}

Итак, я хочу сказать, есть ли какая-либо операция или формула, которая изменит 0 -> 9, и другие случаи как обычно, без оператора ветвления if?

Я думаю о манипуляциях с битами, но едва могу их найти. : (

Ответы [ 4 ]

4 голосов
/ 28 мая 2020

Можно использовать мод:

return (val + 9) % 10;
1 голос
/ 28 мая 2020

Если вы хотите избежать по модулю, вы можете сделать следующее:

int subtractByOne(int val) {
    val = val - 1;
    return val + ((val >> 31) & 10);
}

val >> 31 будет равно нулю, если val не является отрицательным, когда все единицы, поэтому поправочный член будет только применяется, если исходный val был 0.

0 голосов
/ 28 мая 2020

Вы можете использовать следующие

Math.abs(~val<<3)+1

, но у него есть ограничения, это полезно, когда вы хотите изменить на 9, только если вы хотите дальше, вы можете изменить биты.

0 голосов
/ 28 мая 2020

Учитывайте

int subtractByOne(int val) {
    return (val - 1) % 10;
}

Функция modulo должна возвращать то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...