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
æ§æ 弿° è¿å¤
x
ã® 32 ããããã¤ããªã¼è¡¨ç¾ã§ã®å
é ã® 0 ã®åæ°ã
clz32
㯠CountLeadingZeros32 ã®çç¥å½¢ã§ãã
x
ãæ°å¤ã§ãªãå ´åãã¾ãæ°å¤ã«å¤æããã32 ããã符å·ãªãæ´æ°å¤ã«å¤æããã¾ãã
夿ããã 32 ããã符å·ãªãæ´æ°ã 0
ã®å ´åã 32
ãè¿ããã¾ããããã¯ããã¹ã¦ã®ãããã 0
ã§ããããã§ããæä¸ä½ãããã 1
ã®å ´åï¼ããªãã¡ãæ°å¤ã 231 以ä¸ã®æ°å¤ã§ããå ´åï¼ã 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
å
é ã® 1 ãæ°ãã
ç¾å¨ã®ã¨ããã "Count Leading Ones" ã表ã Math.clon
ã¯ããã¾ãã ("clo" ã§ã¯ãªã "clon" ã¨åä»ãããã¦ãã¾ãããªããªã "clo" 㨠"clz" ã¯ç¹ã«è±èªã話ããªã人ã«ã¨ã£ã¦ã¯ä¼¼ããã¦ããããã§ã)ããããã clon
颿°ã¯ãæ°å¤ã®ããããéæ°ã«ãã¦ããã®çµæã Math.clz32
ã«æ¸¡ããã¨ã§ç°¡åã«ä½ããã¨ãã§ãã¾ãã 1 ã®éæ°ã¯ 0 ã§ããããã®éãåæ§ã§ãããã®ããã«ãããããéæ°ã«ããã¨ã測å®ããã 0 ã®éã (Math.clz32
ããã®) éæ°ã«ãªãã Math.clz32
ã¯ã¼ãã®æ°ãæ°ããã®ã§ã¯ãªãã1 ã®æ°ãæ°ããããã«ãªãã¾ãã
以ä¸ã® 32 ãããã¯ã¼ãå¤ãæ³å®ãã¦ã¿ã¾ãã
const a = 32776; // 00000000000000001000000000001000 ï¼å
é ã®ã¼ã㯠16 åï¼
Math.clz32(a); // 16
const b = ~32776; // 11111111111111110111111111110111 ï¼32776 ã®éãå
é ã®ã¼ã㯠0 åï¼
Math.clz32(b); // 0 ï¼ããã¯ã a ã«ããå
é ã® 1 ã®æ°ã«çããï¼
ãã®è«çã使ç¨ããã¨ã clon
颿°ã¯æ¬¡ã®ããã«ä½æãããã¨ãã§ãã¾ãã
const clz = Math.clz32;
function clon(integer) {
return clz(~integer);
}
ããã«ããã®ãã¯ããã¯ãæ¡å¼µãã¦ãä¸è¨ã®ãããªã¸ã£ã³ãã®ãªã "Count Trailing Zeros" 颿°ã使ãããã¨ãã§ãã¾ãã ctrz
颿°ã¯ã 2 ã®è£æ°ãæã¤æ´æ°ã®ãããåä½ã® AND æ¼ç®ãè¡ãã¾ãã 2 ã®è£æ°ã«ãããã¨ã§ããã¹ã¦ã®æ«å°¾ã®ã¼ãã 1 ã«å¤æããã 1 ãå ç®ããã¨ãæåã® 0 ï¼å
ã
㯠1ï¼ã«éããã¾ã§å¼ãç¶ããã¾ããããããä¸ä½ã®ãããã¯ãã¹ã¦ãã®ã¾ã¾ç¶æãããå
ã®æ´æ°ã®ãããã®éæ°ã¨ãªãã¾ãããããã£ã¦ãå
ã®æ´æ°ã¨ãããåä½ã®è«çç©ãè¨ç®ããã¨ãä¸ä½ã®ãããã¯ãã¹ã¦ 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);
}
次ã«ã "Count Trailing Ones" 颿°ã次ã®ããã«å®ç¾©ãã¾ãã
function ctron(integer) {
return ctrz(~integer);
}
ãããã®ãã«ãã¼é¢æ°ã¯ãããã©ã¼ãã³ã¹ã®åä¸ãç®çã¨ãã¦ã asm.js ã¢ã¸ã¥ã¼ã«ã«ãããã¨ãã§ãã¾ãã
const countTrailsMethods = (function (stdlib, foreign, heap) {
"use asm";
const clz = stdlib.Math.clz32;
// å
é ã®ã¼ããæ°ãã
function ctrz(integer) {
integer = integer | 0; // æ´æ°ã«å¤æ
if ((integer | 0) == 0) {
// ãã®ã¹ããããé£ã°ã㨠-1 ãè¿ããã¨ã«ãªã
return 32;
}
// ã¡ã¢: asm.js ã«ã¯ &= ã®ãããªè¤å代å
¥æ¼ç®åããªã
integer = integer & -integer; // equivalent to `int = int & (~int + 1)`
return (31 - clz(integer)) | 0;
}
// æå¾ã® 1 ãæ°ãã
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