Когда числа находятся в отрицательном домене (например, бит подписания равен 1
), они принимают минимальное значение, когда «фактическое» двоичное представление (т.е. игнорирование бита подписи, касающееся только части, в которой хранится номер) равно 0.
Например,
Подписанный двоичный файл: 10000000
представляет -128 в десятичном формате.
Это имеет смысл, поскольку для каждого приращения двоичного представления имеется приращение десятичное число (помните -127 - еще один, а -128). Если вы имеете дело только в десятичном значении и игнорируете любые правила, запрещающие поведение переполнения, вы увидите, что по мере приближения числа к максимальному положительному значению он немедленно принимает максимальное отрицательное значение и рассчитывает до 0.
Еще одна точка вы можете видеть, что двоичное представление для -1 будет 11111111
. Если мы увеличим это на единицу, получим 1 00000000
, где ведущий будет отброшен, указав нам номер 0.
Быстрый способ определить, что является значением знакового отрицательного числа, - взять двоичный (игнорируя бит подписи) и добавьте его к максимальному отрицательному числу.
Например,
Если у нас есть двоичное представление 10000001
, где значение без знака - 129, мы может видеть, что игнорирование бит подписи у нас есть 1
, который мы добавляем к -128, давая ответ -127.
Обратите внимание: я игнорирую тот факт, что иногда переполнение не разрешено, а неопределенное поведение может результат. Я также имею дело с подписанными символами в этом ответе. Если у вас есть случай, когда вы имеете дело с неподписанными символами, тогда полное двоичное выражение используется, чтобы дать ему значение (например, 10000001
= 129).
Конечно - используйте split
, reduce
и filter
с %
(по модулю) для делимости:
const str = "The best 6 of 8 will get 9 points";
const strArr = str.split("");
const threesArr = strArr.filter(e => parseInt(e) % 3 == 0);
const sumOfThrees = threesArr.reduce((acc, curr) => acc + parseInt(curr), 0);
const allNumbers = strArr.filter(e => parseInt(e));
const lastNumber = allNumbers[allNumbers.length - 1];
console.log("Sum: " + sumOfThrees);
console.log("Last: " + lastNumber);