Я пытаюсь понять, как складывать, вычитать, делить и умножать, работая с битами.
Необходимо выполнить некоторую оптимизацию моей программы на JavaScript из-за того, что многие вычисления выполняются после того, как произошло событие.
Используя приведенный ниже код для справки, я могу понять, что перенос содержит значение &ing. Затем, выполнив операцию XOr, которая устанавливает сумму var в биты, которые не совпадают в каждой переменной n1 / n2.
Вот мой вопрос.; )Что дает сдвиг (n1 и n2 )
function add(n1,n2)
{
var carry, sum;
// Find out which bits will result in a carry.
// Those bits will affect the bits directly to
// the left, so we shall shift one bit.
carry = (n1 & n2) << 1;
// In digital electronics, an XOR gate is also known
// as a quarter adder. Basically an addition is performed
// on each individual bit, and the carry is discarded.
//
// All I'm doing here is applying the same concept.
sum = n1 ^ n2;
// If any bits match in position, then perform the
// addition on the current sum and the results of
// the carry.
if (sum & carry)
{
return add(sum, carry);
}
// Return the sum.
else
{
return sum ^ carry;
};
};
Приведенный выше код работает должным образом, но не возвращает значения с плавающей запятой. Мне нужно, чтобы общая сумма возвращалась вместе со значением с плавающей запятой.
Есть ли у кого-нибудь функция, которую я могу использовать с вышеизложенным, которая поможет мне со значениями с плавающей запятой?Есть ли веб-сайт с четким объяснением того, что я ищу? Я пробовал искать в последний день так и не могу найти ничего, чтобы посмотреть.
Я получил приведенный выше код с этого ресурса.http://www.dreamincode.net/code/snippet3015.htm
Подумав об этом, сдвиг влево в 1 позицию будет умножением на 2.
Таким образом, &ing:Carry = (n1 & n2 )Переменная переноса будет содержать строку двоичных файлов, скомпилированных из совпавших позиций в n1 и n2. Итак, если n1 равно 4, а n2 равно 4, они оба имеют одно и то же значение. Следовательно, при сложении двух и сдвиге вправо к индексу 1 будет умножаться 4 x 2 = 8; поэтому перенос теперь будет равен 8.
1. )var перенос = 00001000 =8 & 00001000 = 8
2. )Carry = теперь содержит единственное значение 00001000 = 8
Сдвиг влево умножит 8 x 2 = 16, или 8 + 8 = 16
3. )перенос = перенос
4. )перенос теперь содержит одно значение 00010000 = 16
Я до сих пор не могу найти ничего по работе со значениями с плавающей запятой. Если у кого-то есть что-то, киньте ссылку.