Ce face Math.clz32 / imul
Math.clz32 (count leading zeros) transformă numărul într-un întreg fără semn pe 32 de biți și returnează câte zerouri are la stânga în scrierea binară. Pentru 0 returnează 32.
Math.imul înmulțește două numere ca întregi pe 32 de biți, cu depășire, cum ar face limbajul C. Se folosește în funcții de hash și în cod compilat (asm.js, WebAssembly).
Parametri
| Parametru | Descriere |
|---|---|
x |
Pentru clz32: numărul. |
a, b |
Pentru imul: cele două numere înmulțite. |
Ce returnează
Un număr întreg.
Exemple
Exemplul 1: Zerouri din față
for (const n of [1, 8, 255, 0]) {
console.log(n, n.toString(2).padStart(32, "0").slice(-12), Math.clz32(n));
}
Rezultat
1 000000000001 31
8 000000001000 28
255 000011111111 24
0 000000000000 32
Exemplul 2: Înmulțire pe 32 de biți și un hash simplu
console.log(Math.imul(3, 4));
console.log(Math.imul(0xffffffff, 5), 0xffffffff * 5);
function hash(text) {
let h = 0;
for (const c of text) h = Math.imul(31, h) + c.codePointAt(0) | 0;
return h;
}
console.log(hash("Iași"), hash("Cluj"));
Rezultat
12
-5 21474836475
2284712 2103518
Greșeli frecvente
- Folosești
Math.imulpentru înmulțiri obișnuite. Pentru numere mari rezultatul este tăiat la 32 de biți și iese complet diferit.
Comenzi înrudite
Number.prototype.toString: Transformă un număr în text, opțional în altă bază: binar, octal, hexazecimal.Math.log / log10 / log2 / exp: Logaritmi (natural, zecimal, în baza 2) și funcția exponențială e la puterea x.