Baseline Widely available
Math.clz32()
ì ì ë©ìëë ì«ìì 32ë¹í¸ ì´ì§ ííìì ì í 0 ë¹í¸ì ê°¯ì를 ë°íí©ëë¤.
// 00000000000000000000000000000001
console.log(Math.clz32(1));
// Expected output: 31
// 00000000000000000000000000000100
console.log(Math.clz32(4));
// Expected output: 29
// 00000000000000000000001111101000
console.log(Math.clz32(1000));
// Expected output: 22
구문 매ê°ë³ì ë°í ê°
32ë¹í¸ ì´ì§ ííìì x
ì ì í 0 ë¹í¸ ì를 ë°íí©ëë¤.
clz32
ë CountLeadingZeros32 ì ì½ìì
ëë¤.
ë§ì¼ x
ê° ì«ìê° ìëë¼ë©´, ì´ë ê°ì¥ 먼ì ì«ìë¡ ë³íì´ ëê³ ê·¸ ë¤ì 32ë¹í¸ì 기í¸ê° ìë ì ìë¡ ë³íë©ëë¤.
ë³íë 32ë¹í¸ì ê¸°í¸ ìë ì ìê° 0
ì´ë¼ë©´ 32
ê° ë°íë©ëë¤. ìëíë©´ 모ë ë¹í¸ë 0
ì´ê¸° ë문ì
ëë¤. ë§ì¼ (ì«ìê° 231 ë³´ë¤ í¬ê±°ë ê°ì ê²½ì°ì²ë¼) ê°ì¥ í° ë¹í¸ê° 1
ì´ë¼ë©´ 0
ì´ ë°íë©ëë¤.
ì´ í¨ìë Emscripten ì²ë¼ JSë¡ ì»´íì¼ëë ì²´ê³ì í¹í ë ì ì©íê² ì¬ì©ë©ëë¤.
ìì Math.clz32() ì¬ì©í기Math.clz32(1); // 31
Math.clz32(1000); // 22
Math.clz32(); // 32
const stuff = [
NaN,
Infinity,
-Infinity,
0,
-0,
false,
null,
undefined,
"foo",
{},
[],
];
stuff.every((n) => Math.clz32(n) === 32); // true
Math.clz32(true); // 31
Math.clz32(3.5); // 30
ì í ë¹í¸ ì°ì°ê³¼ ê·¸ ì´ì
íì¬ë ì í ë¹í¸ ì°ì°("clo" ê° ìëë¼ "clon" ì´ë¼ê³ ë¶ë¥´ëë°, ì´ë "clo" ì "clz" ê° ìì´ë¥¼ ì¬ì©íì§ ìë ì¬ëë¤ìê² ë§¤ì° ì ì¬íê² ëê»´ì§ ì ì기 ë문ì
ëë¤.)ì ìí Math.clon
í¨ìë ììµëë¤. íì§ë§ clon
í¨ìë ì½ê² ë¹í¸ë¥¼ ì«ìë¡ ì°ì°íì´ Math.clz32
ì ê²°ê´ê°ì¼ë¡ ì ë¬ë©ëë¤. ì´ë 1ì ë°ëê° 0ì´ê³ ê·¸ ë°ëë ë§ì°¬ê°ì§ì´ê¸° ë문ì ìëí©ëë¤. ë°ë¼ì ë¹í¸ë¥¼ ë°ì ìí¤ë©´ 0ì 측ì ë ìë( Math.clz32
ìì)ì´ ë°ì ëì´ Math.clz32
ê° 0 ëì 1ì ê°ì를 ì¸ê² ë©ëë¤.
ë¤ì 32ë¹í¸ ìì 를 ì´í´ë³´ì¸ì.
const a = 32776; // 00000000000000001000000000001000 (16ê°ì ì í 0ì´ ìì)
Math.clz32(a); // 16
const b = ~32776; // 11111111111111110111111111110111 (32776 ë°ì , 0ê°ì ì í 0ì´ ìì)
Math.clz32(b); // 0 (ì´ë aìì ì¼ë§ë ë§ì ì í ê°ì´ ìëì§ì ëì¼í ê°ì
ëë¤.)
ì´ ë¡ì§ì ì¬ì©íë©´ clon
í¨ìë ë¤ìê³¼ ê°ì´ ìì±ë©ëë¤.
const clz = Math.clz32;
function clon(integer) {
return clz(~integer);
}
ë ëìê°, ì´ ê¸°ì ì ìëì ê°ì´ ì íê° ìë "íí 0 ì¸ê¸°" í¨ì를 ë§ëë ë°ì íì¥íì¬ ì¬ì©í ì ììµëë¤. ctrz
í¨ìë ì ìì ê·¸ 2ì ë³´ìì ë¹í¸ AND ì°ì°ì ìíí©ëë¤. 2ì ë³´ìê° ìëíë ë°©ìì ë°ë¼, 모ë íí ì ë¡ë 1ë¡ ë³íëê³ , 1ì ëí ë (ìëë 1
ì´ìë) 첫ë²ì§¸ 0
ì ëë¬í ëê¹ì§ ì¬ë¦¼ì´ ë°ìí©ëë¤. ì´ ë¹í¸ë³´ë¤ ëì 모ë ë¹í¸ë ëì¼íê² ì ì§ëë©° ìë ì ì ë¹í¸ì ììì
ëë¤. ë°ë¼ì ìë ì ìì ë¹í¸ AND ì°ì°ì í ë, ë ëì 모ë ë¹í¸ë 0
ì´ ëë©°, ì´ë clz
ë¡ ì¹´ì´í¸ë ì ììµëë¤. íí ì ë¡ì ìì ì²ì 1
ë¹í¸, ê·¸ë¦¬ê³ clz
ë¡ ì¸ì´ì§ ì í ë¹í¸ì í©ì 32ê° ë©ëë¤.
function ctrz(integer) {
integer >>>= 0; // Uint32ë¡ ë³í
if (integer === 0) {
// ì´ êµ¬ë¬¸ì ì¤íµíë©´ -1ì´ ë°íë ì ììµëë¤.
return 32;
}
integer &= -integer; // ë¤ì ì°ì°ê³¼ ëì¼í©ëë¤. `int = int & (~int + 1)`
return 31 - clz(integer);
}
"íí 0 ì¸ê¸°" í¨ìë ë¤ìì²ë¼ ëìí©ëë¤.
function ctron(integer) {
return ctrz(~integer);
}
ì´ í¬í¼ í¨ìë¤ì ì ì¬ì ì¸ ì±ë¥ ê°ì ì ìí´ asm.js 모ëì ë§ë¤ ì ììµëë¤.
const countTrailsMethods = (function (stdlib, foreign, heap) {
"use asm";
const clz = stdlib.Math.clz32;
// íí 0 ì¸ê¸°
function ctrz(integer) {
integer = integer | 0; // ì ìë¡ ë³í
if ((integer | 0) == 0) {
// ì´ êµ¬ë¬¸ì ì¤íµíë©´ -1ì´ ë°íë ì ììµëë¤.
return 32;
}
// Note: asm.jsë &=ì ê°ì ë³µí© í ë¹ ì°ì°ì를 ê°ì§ê³ ìì§ ììµëë¤.
integer = integer & -integer; // ë¤ì ì°ì°ê³¼ ëì¼í©ëë¤. `int = int & (~int + 1)`
return (31 - clz(integer)) | 0;
}
// íí ê°¯ì ì¸ê¸°
function ctron(integer) {
integer = integer | 0; // ì ìë¡ ë³í
return ctrz(~integer) | 0;
}
// asm.jsë ìì ê°ì²´ë¥¼ íìë¡ í©ëë¤.
return { ctrz: ctrz, ctron: ctron };
})(window, null, null);
const { ctrz, ctron } = countTrailsMethods;
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4