Math.clz32() 関数は、引数として与えられた数値の 32 ビットバイナリ表現での先頭の 0 の個数を返します。

構文

Math.clz32(x)

引数

x
数値。

返値

与えられた数値の32ビットバイナリ表現での先頭の 0 の個数。

説明

"clz32" は CountLeadingZeroes32 の省略です。

x が数値でない場合、まず数値に変換され、32ビット符号なし整数値に変換されます。

変換された 32 ビット符号なし整数値が 0 の場合、すべてのビットが 0 のため、32 を返します。

この関数は Emscripten のような JS にコンパイルするシステムに対して特に役に立ちます。

Math.clz32() を使う

Math.clz32(1);                // 31
Math.clz32(1000);             // 22
Math.clz32();                 // 32

[NaN, Infinity, -Infinity, 0, -0, null, undefined, 'foo', {}, []].filter(
function(n) {
  return Math.clz32(n) !== 32
});                           // []

Math.clz32(true);             // 31
Math.clz32(3.5);              // 30

ポリフィル

以下のポリフィルが最も効果的です。

if (!Math.clz32) Math.clz32 = (function(log, LN2){
  return function(x) {
    // Let n be ToUint32(x).
    // Let p be the number of leading zero bits in 
    // the 32-bit binary representation of n.
    // Return p.    
    if (x == null || x === 0) {
      return 32;
    }
    return 31 - log(x >>> 0) / LN2 | 0; // the "| 0" acts like math.floor
  };
})(Math.log, Math.LN2);

仕様書

仕様書 状態 備考
ECMAScript 2015 (6th Edition, ECMA-262)
Math.clz32 の定義
標準 初回定義
ECMAScript Latest Draft (ECMA-262)
Math.clz32 の定義
ドラフト  

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
基本対応Chrome 完全対応 38Edge 完全対応 ありFirefox 完全対応 31IE 未対応 なしOpera 完全対応 25Safari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 31Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

ドキュメントのタグと貢献者

このページの貢献者: mfuji09, apple502j, dskmori, shide55
最終更新者: mfuji09,