الفرق بين المراجعتين لصفحة: «Ruby/Integer/bit length»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 8: | سطر 8: | ||
هذا التابع يعيد ناتج التعبير ''<code>ceil(log2(int < 0 ? -int : int+1))</code>''. | هذا التابع يعيد ناتج التعبير ''<code>ceil(log2(int < 0 ? -int : int+1))</code>''. | ||
يمكن استخدام هذا التابع لرصد التجاوزات (overflow) في <code>[[Ruby/Array/pack|Array#pack]]</code> ، كما يلي:<syntaxhighlight lang="ruby">if n.bit_length < 32 | |||
[n].pack("l") # no overflow | |||
else | |||
raise "overflow" | |||
end</syntaxhighlight> | |||
==البنية العامة== | ==البنية العامة== |
مراجعة 22:47، 14 أكتوبر 2018
يعيد التابع bit_length
عدد بتات قيمة العدد الذي استُدعي معه.
يُقصد بـ "عدد البتات" موضع أعلى بتة والتي تختلف عن بتة الإشارة [sign bit] (حيث يكون موضع البتة الأقل دلالة [least significant bit] هو 1). إذا لم يكن تلك البتة موجودة (أي إذا كانت قيمة الموضع صفر أو ناقص واحد) ، فسيُعاد الصفر.
هذا التابع يعيد ناتج التعبير 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
عدد بتات قيمة العدد الذي استُدعي معه.
أمثلة
مثال على استخدام التابع 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) بين بتات طرفي العملية، بتةً بتةً.
- التابع
allbits?
: يعيد التابعallbits?
القيمةtrue
إن كانت قيم كل بتات ناتج العمليةint & mask
تساوي واحد.