Рассматривая этот вопрос Я пытался выяснить эту функцию
_shl: function (a, b){
for (++b; --b; a = ((a %= 0x7fffffff + 1) & 0x40000000) == 0x40000000 ? a * 2 : (a - 0x40000000) * 2 + 0x7fffffff + 1);
return a;
}
Я выяснил синтаксис javascript, а также нашел несжатую версию функции, используемой в реализации md5 javascript
function shl1(a) {
a=a%(0x7fffffff+1);
if (a&0x40000000==0x40000000)
{
a-=0x40000000;
a*=2;
a+=(0x7fffffff+1);
} else
a*=2;
return a;
}
function shl(a,b) {
a=integer(a);
b=integer(b);
for (var i=0;i<b;i++) a=shl1(a);
return a;
}
У меня вопрос, что значимо в 0x40000000
и 0x7fffffff
. Я немного понимаю идею побитового сдвига, но теряюсь в важности этих двух чисел.