@classmethod
def least_significant_bit(cls, value):
    """
        Computes the least-significant bit of the specified ``long``
        that is set to ``1``. Zero-indexed.

        See <http://stackoverflow.com/questions/757059/position-of-least-significant-bit-that-is-set>
        and <http://www-graphics.stanford.edu/~seander/bithacks.html>.

        :param long value: the ``long`` whose least-significant bit is desired.
        :returns: the least-significant bit of the specified ``long``.
                  ``-1`` is returned if there are no bits set.
        :rtype: int
        """
    if value == 0:
        return -1
    elif value & 255 != 0:
        index = int(cls.unsigned_right_shift_long(value, 0) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 0
    elif value & 65535 != 0:
        index = int(cls.unsigned_right_shift_long(value, 8) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 8
    elif value & 16777215 != 0:
        index = int(cls.unsigned_right_shift_long(value, 16) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 16
    elif value & 4294967295 != 0:
        index = int(cls.unsigned_right_shift_long(value, 24) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 24
    elif value & 1099511627775 != 0:
        index = int(cls.unsigned_right_shift_long(value, 32) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 32
    elif value & 281474976710655 != 0:
        index = int(cls.unsigned_right_shift_long(value, 40) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 40
    elif value & 72057594037927935 != 0:
        index = int(cls.unsigned_right_shift_long(value, 48) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 48
    else:
        index = int(cls.unsigned_right_shift_long(value, 56) & 255)
        return cls.LEAST_SIGNIFICANT_BIT[index] + 56
