summaryrefslogtreecommitdiff
path: root/integer.rb
diff options
context:
space:
mode:
authorAlan Wu <alanwu@ruby-lang.org>2020-12-14 20:01:55 -0500
committerAlan Wu <alanwu@ruby-lang.org>2020-12-14 20:01:55 -0500
commitc59b9a8c0c50a6df13909c71e43de09a152b122d (patch)
tree482f1d001106330e086069ec10dd426f2da9f395 /integer.rb
parentbefa24488c2757b55be12ae3ca866156f5a4073f (diff)
Move docs for Integer#bit_length [ci skip]
Diffstat (limited to 'integer.rb')
-rw-r--r--integer.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/integer.rb b/integer.rb
index f2f1e79a5e..b9cde8f390 100644
--- a/integer.rb
+++ b/integer.rb
@@ -4,6 +4,47 @@ class Integer
Primitive.cexpr! 'rb_int_abs(self)'
end
+ # call-seq:
+ # int.bit_length -> integer
+ #
+ # Returns the number of bits of the value of +int+.
+ #
+ # "Number of bits" means the bit position of the highest bit
+ # which is different from the sign bit
+ # (where the least significant bit has bit position 1).
+ # If there is no such bit (zero or minus one), zero is returned.
+ #
+ # I.e. this method returns <i>ceil(log2(int < 0 ? -int : int+1))</i>.
+ #
+ # (-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
+ #
+ # This method can be used to detect overflow in Array#pack as follows:
+ #
+ # if n.bit_length < 32
+ # [n].pack("l") # no overflow
+ # else
+ # raise "overflow"
+ # end
def bit_length
Primitive.attr! 'inline'
Primitive.cexpr! 'rb_int_bit_length(self)'