Autor Zpráva
SeparateSK
Profil
Dobrý deň ako je možné ,že 2 na 16 = 2 na 304 ?
Tu je ukáźka:
<script>
var num=2;
if(num<<16==num<<304)alert("Zhoda | 2<<16 = 2<<304");
</script>
A pritom (num<<17)>(num<<304) ,teda 2 na 17 je väčšie ako 2 na 304?
Teda:
<script>
var num=2;
if(num<<17>num<<304)alert("2<<17 je väčšie ako 2<<304");
</script>
weroro
Profil
Toto ale nie sú mocniny, toto je bitový posun vľavo.

Mocniny v JS robíme pomocou Math.pow(hodnota, mocniteľ);
SeparateSK
Profil
Je dosť podobné mocninám :
lebo Math.pow(2,4) == 2<<3; a Math.pow(2,5)==2<<4;
na ten rozdiel ,že mocniteľ v tomto zápise(2<<4) je vždy o jedno menší ako mocniteľ v Math.pow (2,5)
weroro
Profil
Nie je to to isté, funguje to trochu inak. :)
Napr. tebou spomínané 2<<304 vráti 131072 Ale mocnina Math.pow(2, 305) vráti 6.51851512427035e+91


Nepoužívaj bitový posun na mocnenie, nie je to na to určené a tu vidíš aj prečo.


Urobil som pokus a vyšlo mi toto (Kód ActionScript ale je to to isté ako JS akurát sa striktne deklarujú premenné):

var a:Number = 2;
var b:Number = 10;
//
var c:Number = Math.pow (a, b + 1);
var d:Number = a << b;
var e:Number = a << (b + 32);
//
trace (c + "   " + d + "   " + e); //vráti 2048 2048 2048

Pri a<<b sa opakuje výsledok každých 32 posunov kdežto pri Math.pow(); vráti vždy iný výsledok (pochopiteľne).
SeparateSK
Profil
Ďakujem, ja som bitový posun používal na tvorenie mocnín, lebo som ešte nevedel o Math.pow,
samozrejme aj za vysvetlenie o opakovaní bitového posunu.
Tú mocninu 304 som len tak skúsil, lebo som testoval,že koľko núl musí mať číslo aby bolo Infinity a zistil som ,že to musí mať 304 núl :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: