From eb8c29cf9e86c843a206e2bfde8306a3e3a72efb Mon Sep 17 00:00:00 2001 From: kylin Date: Thu, 11 Jun 2026 07:47:38 +0800 Subject: [PATCH] fix: raise ValueError for zero input in binary_count_trailing_zeros The function previously returned 0 for a == 0, but mathematically the number of trailing zeros in the binary representation of 0 is undefined (infinite). Now raises ValueError with a clear message. Fixes #14479 --- bit_manipulation/binary_count_trailing_zeros.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bit_manipulation/binary_count_trailing_zeros.py b/bit_manipulation/binary_count_trailing_zeros.py index f401c4ab9266..55abaedb1b53 100644 --- a/bit_manipulation/binary_count_trailing_zeros.py +++ b/bit_manipulation/binary_count_trailing_zeros.py @@ -17,7 +17,9 @@ def binary_count_trailing_zeros(a: int) -> int: >>> binary_count_trailing_zeros(4294967296) 32 >>> binary_count_trailing_zeros(0) - 0 + Traceback (most recent call last): + ... + ValueError: Input value must be a positive integer >>> binary_count_trailing_zeros(-10) Traceback (most recent call last): ... @@ -29,13 +31,13 @@ def binary_count_trailing_zeros(a: int) -> int: >>> binary_count_trailing_zeros("0") Traceback (most recent call last): ... - TypeError: '<' not supported between instances of 'str' and 'int' + TypeError: '<=' not supported between instances of 'str' and 'int' """ - if a < 0: + if a <= 0: raise ValueError("Input value must be a positive integer") elif isinstance(a, float): raise TypeError("Input value must be a 'int' type") - return 0 if (a == 0) else int(log2(a & -a)) + return int(log2(a & -a)) if __name__ == "__main__":