인프런 커뮤니티 질문&답변

김동현님의 프로필 이미지
김동현

작성한 질문수

독하게 시작하는 C 프로그래밍

곱셈, 나눗셈, 시프트 그리고 하드웨어 손상

쉬프트연산에서 궁금한점이 있습니다.

해결된 질문

작성

·

113

0

곱셈, 나눗셈 할 때 CPU가 비트를 왼쪽, 오른쪽으로 쉬프트연산을 하는건 이해가 됩니다.

그런데 유효 비트자리수를 넘어가면 절삭이 되잖아요.

절삭이 되면 사실상 데이터를 잃어버리게 되는것인데

절삭이 될지 안될지 어떻게 미리 알고 곱셈, 나눗셈을 연산하나요?

 

 

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

미리 아는 것이 아니라 절사되는 데이터가 있을 경우 특정 레지스터의 값이 변합니다. 0이 1로 바뀐다고 보시면 되겠습니다. 보통 플래그가 세트됐다라고 이야기 합니다. 이를 근거로 절사상태를 인지 할 수 있습니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.

김동현님, CPU에서의 쉬프트 연산과 관련하여 왼쪽, 오른쪽 쉬프트 시 유효 비트 자리수를 넘어가는 경우의 절삭과 관련된 질문이시군요. 곱셈과 나눗셈을 할 때, 쉬프트 연산은 주어진 비트를 왼쪽 또는 오른쪽으로 이동시키는데, 이 과정에서 데이터의 오버플로우(절삭)가 발생할 수 있음을 이해하셨다고 합니다.

CPU에서 쉬프트 연산을 수행할 때, 절삭되는 문제는 주로 프로그램이나 하드웨어의 설계 단계에서 고려되어야 합니다. 즉, 개발자가 알고리즘을 구현하거나 특정 연산을 설계할 때, 해당 연산으로 인해 데이터가 손실될 가능성이 있는지 먼저 검토해야 합니다. 이를 위해, 연산 결과가 변수의 타입이나 환경에서 허용하는 범위를 초과하지 않도록 철저한 계획과 검증이 필요합니다.

특히, 곱셈 연산의 경우, 결과가 입력값에 비해 상당히 증가할 수 있기 때문에, 연산 수행 전 데이터 유형을 선택할 때 최대값을 고려해야 합니다. 예를 들어, 32비트 정수형 변수에서는 2의 31승 미만의 값을 사용하는 것이 일반적입니다. 연산 결과가 이 범위를 초과할 경우 오버플로우를 방지하기 위해 데이터 타입을 더 큰 범위로 변경하는 것을 고려해야 할 수도 있습니다.

다음은 김동현님의 질문에 유사한 내용을 포함하는 답변 링크입니다. 해당 내용은 R-Shift에 대한 질문을 다루고 있으며, 오버플로우나 언더플로우와 같은 경우가 범위를 벗어난 정보가 절사되는 사례를 언급하고 있습니다:
- R-Shift에 대해서 질문드립니다 - 이 글에서는 L-Shift(왼쪽 쉬프트)에서 범위를 초과할 때의 오버플로우와 R-Shift(오른쪽 쉬프트)에서의 언더플로우에 대한 개념을 간단히 설명하고 있습니다.

또한, 곱셈에서 오버플로우에 대한 질문도 확인해보시는 것을 권장드립니다.
- 해당 강의의 곱셈 부분에 질문이 있습니다! - 이 글에서는 곱셈 시 발생할 수 있는 오버플로우 상황과 이를 어떻게 인지할 수 있는지에 대해 설명하고 있습니다.

절삭이 발생할 가능성을 미리 인지하고, 이를 회피하기 위해 적절한 데이터 타입 선택, 조건 분기, 계산 식 설계 등의 방법을 사용해야 합니다. 실제 연산에서는 이와 같은 판단을 바탕으로 프로그램이 오류 없이 원하는 결과를 낼 수 있도록 세심하게 계획해야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김동현님의 프로필 이미지
김동현

작성한 질문수

질문하기