이 함수는 숫자의 특정 위치(pos)에서 k개의 비트를 추출한 후 그 값을 반환합니다. 구현 과정에서는 파이썬의 문자열 슬라이싱(slicing) 기법을 활용합니다.
예시
입력 :: number=170 K=5 Pos=2 출력 = 21
숫자 170을 이진수로 변환하면 10101010입니다. 여기서 오른쪽에서 2번째 위치부터 5개의 비트, 즉 10101을 추출하면, 이를 다시 십진수로 변환한 값인 21이 최종 결과가 됩니다.
알고리즘
Extractionbit(no, k, pos)
/* 사용자가 입력한 숫자는 변수 no에 저장되고, 추출할 비트 개수는 변수 k에, 비트의 위치는 변수 pos에 저장됩니다. */
1단계 : bin() 함수를 사용해 숫자를 이진수 형태로 변환합니다.
2단계 : 변환된 문자열의 맨 앞 두 문자('0b')를 제거합니다.
3단계 : 오른쪽에서 pos번째 위치부터 시작해 k개의 비트를 추출합니다. 이때 추출할 부분 문자열의 끝 인덱스는 e = len(bi) - pos이며, 시작 인덱스는 s = e - k + 1입니다.
4단계 : 해당 범위의 k비트 부분 문자열을 추출합니다.
5단계 : 추출된 부분 문자열을 다시 십진수로 변환합니다.
예제 코드
# 주어진 숫자의 특정 위치에서 'k' 비트를 추출하는 파이썬 프로그램
def extractedbits(no, k, pos):
bi = bin(no) # 숫자를 이진수 문자열로 변환
bi = bi[2:] # 접두사 '0b' 제거
e = len(bi) - pos # 추출 범위의 끝 인덱스
s = e - k + 1 # 추출 범위의 시작 인덱스
substr = bi[s : e+1] # k비트 부분 문자열 추출
print("FINAL RESULT ::>", int(substr, 2)) # 십진수로 변환해 출력
# 드라이버(메인) 프로그램
if __name__ == "__main__":
no = int(input("Enter number ::>"))
k = int(input("Enter k bit's ::>"))
pos = int(input("Enter position ::>"))
extractedbits(no, k, pos)
실행 결과
Enter number ::>170 Enter k bit's ::>5 Enter position ::>2 FINAL RESULT ::>21