비트 시프트 연산자 질문
, 소 준서님이 작성unit 24에서 시프트 연산자를 사용해서 자릿수를 넘어가면 그 부분이 잘리게 된다고 나와있는데 제가 배열 안에 있는 숫자를 시프트 해보니까
1111 0000 같은 수가 왼쪽으로 시프트하니까 0001 1110 0000 처럼 되더라구요. 왜 이렇게 되는건가요? 배열 안에 있는 수를 1바이트 내에 제한하는 방법은 있을까요?
Re: 비트 시프트 연산자 질문
, 도장_ 관리자님이 작성int 배열이면 배열 안에 숫자는 int로 동작합니다.
signed int의 overflow는 정의되지 않은 동작(UB, Undefined Behavior)입니다.
따라서 해당 동작은 컴파일러 구현체마다 결과가 다르고, 왜 그렇게 동작하는지 답변할 수 있는 사항이 아닙니다. 해당 사항은 컴파일러 제조업체에 직접 문의하셔야 할 것으로 보입니다.
unsigned int 배열이면 안에 있는 숫자는 unsigned int로 동작합니다.
unsigned int의 overflow만 정의된 동작입니다.
따라서 int로 테스트한 것이라면 정의되지 않은 동작이므로 왜 그런지 알 수 없습니다.
마찬가지로 이러한 동작을 시험 문제로 내는 학교, 학원이 있다면 무시하십시오.
잘못된 내용을 가르치는 곳이 너무 많습니다. 그리고 입사 면접에서는 이런 질문을 하고 반드시 탈락시키는 곳이 많다는 점도 주의하십시오.