التابع Integer.bit_length
في روبي
يعيد التابع bit_length
عدد بتات العدد الذي استُدعي معه.
يُقصد بـ "عدد البتات" موضع البت الأعلى والذي يختلف عن بت الإشارة (sign bit، حيث يكون موضع البتة الأقل أهمية [least significant bit] هو 1). إذا لم يكن ذلك البت موجودًا (أي إذا كانت قيمة الموضع صفر أو ناقص واحد)، فستعاد القيمة 0.
هذا التابع يعيد ناتج الاستدعاء ceil(log2(int < 0 ? -int : int+1))
.
يمكن استخدام هذا التابع لرصد حالة الطفحان (overflow) في Array.pack
، كما في الحالة التالية:
if n.bit_length < 32
[n].pack("l") # no overflow
else
raise "overflow"
end
البنية العامة
bit_length → integer
القيمة المعادة
يعاد عدد صحيح يمثِّل عدد بتات قيمة العدد الذي استُدعي معه.
أمثلة
مثال على استخدام التابع bit_length
:
(-2**1000-1).bit_length #=> 1001
(-2**1000).bit_length #=> 1000
(-2**1000+1).bit_length #=> 1000
(-2**12-1).bit_length #=> 13
(-2**12).bit_length #=> 12
(-2**12+1).bit_length #=> 12
-0x101.bit_length #=> 9
-0x100.bit_length #=> 8
-0xff.bit_length #=> 8
-2.bit_length #=> 1
-1.bit_length #=> 0
0.bit_length #=> 0
1.bit_length #=> 1
0xff.bit_length #=> 8
0x100.bit_length #=> 9
(2**12-1).bit_length #=> 12
(2**12).bit_length #=> 13
(2**12+1).bit_length #=> 13
(2**1000-1).bit_length #=> 1000
(2**1000).bit_length #=> 1001
(2**1000+1).bit_length #=> 1001
انظر أيضا
- المعامل
&
: ينفذ العملية AND بين بتات العددين المعطيين.
- التابع
anybits?
: يعيد القيمةtrue
إن كانت قيمة إحدى بتات ناتج تطبيق العملية&
على العدد الصحيح المعطى مع القناع الممرر إليه تساوي واحد.