
gmp_popcount 함수는 2진수로 변환된 문자열에서 1의 개수를 반환합니다.
그런데, gmp_strval 함수는 10진수를 2진수로 변환할 때, 2진수 문자열의 앞에 '0b'이 붙습니다.
예를 들어, gmp_strval(5, 2) = '0b101'이 됩니다.
이러한 '0b'이 붙은 문자열에서 1의 개수를 반환하는 것은 gmp_popcount 함수가 '0b'을 무시하고 1의 개수를 반환하도록 설계되어 있지 않습니다.
따라서, gmp_popcount(gmp_strval(5, 2)) = 2, gmp_popcount(gmp_strval(13, 2)) = 2, gmp_popcount(gmp_strval(27, 2)) = 3이 됩니다.
이러한 결과가 기대와 다르다면, '0b'이 붙은 문자열에서 1의 개수를 반환하고 싶다면, '0b'을 제거한 후 gmp_popcount 함수를 사용해야 합니다.
예를 들어, gmp_popcount(str_replace(gmp_strval(5, 2), '0b', '')) = 2, gmp_popcount(str_replace(gmp_strval(13, 2), '0b', '')) = 3, gmp_popcount(str_replace(gmp_strval(27, 2), '0b', '')) = 4이 됩니다.
str_replace 함수는 첫 번째 인자에서 두 번째 인자를 찾아서 세 번째 인자로 대체합니다.
따라서, '0b'이 붙은 문자열에서 '0b'을 제거하고 gmp_popcount 함수를 사용하면 기대하는 결과를 얻을 수 있습니다.
2025-05-13 15:51