الفرق بين المراجعتين ل"JavaScript/Math/clz32"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(لا فرق)

مراجعة 07:28، 5 ديسمبر 2017

الدالة Math.clz32()‎ تعيد عدد الأصفار البادئة (leading zeroes) في التمثيل الثنائي (بطول 32 بت) للعدد.

البنية العامة

Math.clz32(x)

x

العدد التي ستُجرى عليه العملية.

القيمة المعادة

عدد الأصفار البادئة (leading zeros) في التمثيل الثنائي (بطول 32 بت) للعدد المعطي.

الوصف

اسم الدالة "clz32" هو اختصارٌ للعبارة "CountLeadingZeroes32".

إذا لم يكن الوسيط x قيمةً عدديةً، فسيحوّل إلى قيمةٍ عدديةٍ أولًا ثم يحوّل إلى عدد صحيح دون إشارة بالتمثيل الثنائي (بطول 32 بت).

إذا كان العدد الصحيح دون إشارة وبطول 32 بت هو 0، فالناتج هو 32، لأنَّ قيمة جميع البتات هي 0.

هذه الدالة مفيدة خصوصًا للأنظمة (والبرمجيات) التي تحوّل الشيفرات إلى JavaScript، مثل Emscripten.

لمّا كانت الدالة clz32 هي دالةٌ ساكنة (static method) تابعةٌ للكائن Math، فيجب عليك استخدامها دومًا بالشكل Math.clz32(x)‎، إذ لا تستطيع استخدامها كجزء من كائن Math خاص بك (تذكر أنَّ الكائن Math ليس له دالةٌ بانية).

أمثلة

أمثلة على استخدام الدالة 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(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 - Math.floor(Math.log(x >>> 0) * Math.LOG2E);
  };
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 38 31 غير مدعومة 25 نعم

على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.

مصادر ومواصفات