JavaScript/Math/clz32
表示
< JavaScript | Math
Math.clz32(x)
は、引数 x
を32ビット整数として扱い、そのビット表現における先頭のゼロの数を返します[1]。
- 引数
x
がNaN
の場合、32
を返します。 - 引数
x
が+0
または-0
の場合、32
を返します。 - 引数
x
がInfinity
または-Infinity
の場合、0
を返します。 - 引数
x
が1
以上の場合、32 - floor(log2(x)) - 1
を返します。
例
[編集]先頭のゼロの数を計算するプログラム
[編集]以下のプログラムは、ユーザーが入力した値の32ビット整数表現における先頭のゼロの数を計算します。
constf=p=>{for(;;){a=prompt(`${p}は何ですか?`);if(!isNaN(a))returna;alert(`${p}に、入力ミスがあります。 "${a}"`);}}for(;;){constx=f("値");constclz32=Math.clz32(x);if(!isNaN(clz32)){alert(`${x} の32ビット整数表現における先頭のゼロの数は ${clz32} です。`);break;}alert("入力が大きすぎます。");}
このプログラムでは、Math.clz32
を使用して値の32ビット整数表現における先頭のゼロの数を計算しています。ユーザーが入力した値が NaN
や Infinity
の場合、適切に処理されます。
先頭のゼロの数を利用したビット操作
[編集]以下のプログラムは、Math.clz32
を使用して、与えられた数値の最上位ビットの位置を計算します。
constf=p=>{for(;;){a=prompt(`${p}は何ですか?`);if(!isNaN(a))returna;alert(`${p}に、入力ミスがあります。 "${a}"`);}}for(;;){constx=f("値");constclz32=Math.clz32(x);constmsb=31-clz32;if(!isNaN(msb)){alert(`${x} の最上位ビットの位置は ${msb} です。`);break;}alert("入力が大きすぎます。");}
このプログラムでは、Math.clz32
を使用して、与えられた数値の最上位ビットの位置を計算しています。msb
は、最上位ビットの位置を表します。
注意点
[編集]- 32ビット整数:
Math.clz32
は、引数x
を32ビット整数として扱います。このため、x
が32ビット整数の範囲外の場合、結果が予期しないものになることがあります。 - 精度: 浮動小数点演算の特性上、
Math.clz32
の結果には微小な誤差が含まれることがあります。
脚註
[編集]- ^これは、32ビット整数の最上位ビットから数えて、最初の
1
が現れるまでの0
の数を返します。