Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Math.clz32()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
DieMath.clz32() statische Methode gibt die Anzahl der führenden Nullbits in der 32-Bit-Binärdarstellung einer Zahl zurück.
In diesem Artikel
Probieren Sie es aus
// 00000000000000000000000000000001console.log(Math.clz32(1));// Expected output: 31// 00000000000000000000000000000100console.log(Math.clz32(4));// Expected output: 29// 00000000000000000000001111101000console.log(Math.clz32(1000));// Expected output: 22Syntax
Math.clz32(x)Parameter
xEine Zahl.
Rückgabewert
Die Anzahl der führenden Nullbits in der 32-Bit-Binärdarstellung vonx.
Beschreibung
clz32 steht fürCountLeadingZeros32.
Wennx keine Zahl ist, wird es zuerst in eine Zahl und dann in eine 32-Bit-Unsigned-Integer umgewandelt.
Wenn der umgewandelte 32-Bit-Unsigned-Integer0 ist, wird32 zurückgegeben, da alle Bits0 sind. Wenn das höchstwertige Bit1 ist (d.h. die Zahl ist größer oder gleich 231), wird0 zurückgegeben.
Diese Funktion ist besonders nützlich für Systeme, die in JS kompilieren, wieEmscripten.
Beispiele
>Verwendung von Math.clz32()
Math.clz32(1); // 31Math.clz32(1000); // 22Math.clz32(); // 32const stuff = [ NaN, Infinity, -Infinity, 0, -0, false, null, undefined, "foo", {}, [],];stuff.every((n) => Math.clz32(n) === 32); // trueMath.clz32(true); // 31Math.clz32(3.5); // 30Implementieren von Count Leading Ones und mehr
Derzeit gibt es keinMath.clon für "Count Leading Ones" (genannt "clon", nicht "clo", da "clo" und "clz" besonders für nicht-englischsprachige Personen zu ähnlich sind). Eineclon-Funktion kann jedoch leicht erstellt werden, indem die Bits einer Zahl invertiert und das Ergebnis anMath.clz32 übergeben wird. Dies funktioniert, weil das Inverse von 1 gleich 0 ist und umgekehrt. Das Invertieren der Bits kehrt die gemessene Menge der 0en (vonMath.clz32) um und lässt dadurchMath.clz32 die Zahl der Einsen zählen, anstatt die der Nullen.
Betrachten Sie das folgende 32-Bit-Wort:
const a = 32776; // 00000000000000001000000000001000 (16 leading zeros)Math.clz32(a); // 16const b = ~32776; // 11111111111111110111111111110111 (32776 inverted, 0 leading zeros)Math.clz32(b); // 0 (this is equal to how many leading one's there are in a)Mit dieser Logik kann eineclon-Funktion wie folgt erstellt werden:
const clz = Math.clz32;function clon(integer) { return clz(~integer);}Darüber hinaus könnte diese Technik erweitert werden, um eine sprunglose "Count Trailing Zeros"-Funktion zu erstellen, wie unten gezeigt. Diectrz-Funktion nimmt ein bitweises UND des Integers mit seinem Zweierkomplement. Durch die Funktionsweise von Zweierkomplement werden alle endständigen Nullen in Einsen umgewandelt, und wenn dann 1 hinzugefügt wird, würde es bis zur ersten0 (die ursprünglich eine1 war) übertragen werden. Alle Bits höher als dieses bleiben gleich und sind Inverse der Bits des ursprünglichen Integers. Daher werden bei einem bitweisen UND mit dem ursprünglichen Integer alle höheren Bits zu0, die mitclz gezählt werden können. Die Anzahl der endständigen Nullen, plus das erste1-Bit, plus die führenden Bits, die durchclz gezählt werden, summieren sich auf 32.
function ctrz(integer) { integer >>>= 0; // coerce to Uint32 if (integer === 0) { // skipping this step would make it return -1 return 32; } integer &= -integer; // equivalent to `int = int & (~int + 1)` return 31 - clz(integer);}Dann können wir eine "Count Trailing Ones"-Funktion wie folgt definieren:
function ctron(integer) { return ctrz(~integer);}Diese Hilfsfunktionen können in einasm.js Modul umgewandelt werden für eine mögliche Leistungsverbesserung.
const countTrailsMethods = (function (stdlib, foreign, heap) { "use asm"; const clz = stdlib.Math.clz32; // count trailing zeros function ctrz(integer) { integer = integer | 0; // coerce to an integer if ((integer | 0) == 0) { // skipping this step would make it return -1 return 32; } // Note: asm.js doesn't have compound assignment operators such as &= integer = integer & -integer; // equivalent to `int = int & (~int + 1)` return (31 - clz(integer)) | 0; } // count trailing ones function ctron(integer) { integer = integer | 0; // coerce to an integer return ctrz(~integer) | 0; } // asm.js demands plain objects: return { ctrz: ctrz, ctron: ctron };})(window, null, null);const { ctrz, ctron } = countTrailsMethods;Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-math.clz32> |