Issue #20163 has been updated by matz (Yukihiro Matsumoto). Accepted, with one change from the proposal: `bit_count` on a negative integer shall raise `ArgumentError` instead of using the absolute value. A negative integer in Ruby is conceptually an infinite two's complement bit string, so its population count is not well defined, and silently using the absolute value could mask bugs. The name `bit_count` is good. In Ruby, `count` means counting matching or present things (`Array#count`, `String#count`), as opposed to `length`, which is the trivial total extent. Viewing an integer as a bit set, the set bits are exactly the elements present, so `bit_count` naturally reads as the number of set bits, and it is clearly distinguished from `bit_length`. It also fits the `bit_at` / `bitwise_*` vocabulary being discussed for `String` in #22082/#22118; if we later add the same operation to `String`, it shall use the same name. Matz. ---------------------------------------- Feature #20163: Introduce #bit_count method on Integer https://bugs.ruby-lang.org/issues/20163#change-118022 * Author: garrison (Garrison Jensen) * Status: Open ---------------------------------------- This feature request is to implement a method called #bit_count on Integer that returns the number of ones in the binary representation of the absolute value of the integer. ``` n = 19 n.bit_count #=> 3 (-n).bit_count #=> 3 ``` This is often useful when you use an integer as a bitmask and want to count how many bits are set. This would be equivalent to ``` n.to_s(2).count("1") ``` However, this can be outperformed by ``` def bit_count(n) count = 0 while n > 0 n &= n - 1 # Flip the least significant 1 bit to 0 count += 1 end count end ``` I think this would be a useful addition because it would fit alongside the other bit-related methods defined on integer: `#bit_length,` `#allbits?`, `#anybits?`, `#nobits?`. Also, when working with bitmasks, a minor upgrade to performance often results in a significant improvement. Similar methods from other languages: https://docs.python.org/3/library/stdtypes.html#int.bit_count https://doc.rust-lang.org/std/primitive.i32.html#method.count_ones -- https://bugs.ruby-lang.org/