2019.03.02 23:16
이 문제에서 주의할 점은 일반적인 오른쪽 shift 연산자는 부호 비트로 채워진다는 것입니다. 즉 음수일 경우에는 왼쪽에 1이 채워지지요.
문제에서는 무조건 왼쪽에 0이 채워져야 합니다.
이러한 경우에는 mask 연산이 필요합니다.
오른쪽 쉬프트 연산을 해서 1일 채워지더라도 1로 채워진 부분을 0으로 바꿔야 합니다.
예를 들어 이진수 1001 (맨 왼쪽 1이 부호 비트라고 가정)이라면...
오른쪽 쉬프트 연산하면 1100 이 됩니다. 이때 맨 앞 왼쪽 비트는 0으로 바꾸려면
1100
& 0111
= 0100
하면 됩니다.
댓글
2019.03.03 01:06
와.. 이제야 쉽게 이해됩니다.
2019.03.17 13:31
저는 이 말씀이 잘 이해가 되지 않는데 소스로 알려주시면 감사하겠습니다.
2019.03.17 14:15
소스에 대한 이해 없이, "올바른 답"만 나오는 건 바람직하지 않습니다. C언어 책에서 비트 연산자 부분을 찾아 보세요~
이 문제에서 주의할 점은 일반적인 오른쪽 shift 연산자는 부호 비트로 채워진다는 것입니다. 즉 음수일 경우에는 왼쪽에 1이 채워지지요.
문제에서는 무조건 왼쪽에 0이 채워져야 합니다.
이러한 경우에는 mask 연산이 필요합니다.
오른쪽 쉬프트 연산을 해서 1일 채워지더라도 1로 채워진 부분을 0으로 바꿔야 합니다.
예를 들어 이진수 1001 (맨 왼쪽 1이 부호 비트라고 가정)이라면...
오른쪽 쉬프트 연산하면 1100 이 됩니다. 이때 맨 앞 왼쪽 비트는 0으로 바꾸려면
1100
& 0111
= 0100
하면 됩니다.