Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Math
  6. clz32()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

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.

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: 22

Syntax

js
Math.clz32(x)

Parameter

x

Eine 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()

js
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); // 30

Implementieren 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:

js
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:

js
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.

js
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:

js
function ctron(integer) {  return ctrz(~integer);}

Diese Hilfsfunktionen können in einasm.js Modul umgewandelt werden für eine mögliche Leistungsverbesserung.

js
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

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp