학습 목표
- 서식 문자, 자리 이동 연산자, 관계 연산자에 대해 설명할 수 있다.
학습 내용
서식 문자
%p 서식 문자는 해당 값을 저장하고 있는 변수의 주소를 출력할 수 있다.
주소는 stack 영역에 할당되며 프로그램을 실행 시킬때마다 다른 주소에 할당된다.
int형 같은 경우 4dyte가 할당되는것을 볼 수 있다.


%x 서식문자는 10진수를 16진수 대문자로 변환한다. %x는 소문자로 출력, %X는 대문자로 출력한다.


자리 이동 연산자
- << 왼쪽으로 자리 이동 연산자
왼쪽으로 자리 이동 연산자는 해당 10진수를 2진수로 변경했을때 각 숫자를 왼쪽으로 이동시키는 연산자를 뜻한다



결과에서 알아볼 수 있듯 해당 값의 *2^n 승의 형대로 연산됨을 알 수 있다
하지만 int형의 byte를 초과하는 값을 출력할 시 정상적인 값이 아닌 다른 값이 출력됨을 확인할 수 있었다. 왜 이런 결과가 나오는지 찾아보자.


- 정답
<<는 정수의 비트를 왼쪽으로 이동시키는 연산을 수행합니다. 이동한 비트는 오른쪽에 0으로 채워집니다.
해당 코드에서 a << 100은 a의 비트를 100번 왼쪽으로 이동시키는 것을 의미합니다. 그러나 C++에서 int 데이터 타입은 보통 32비트 또는 64비트로 표현됩니다. 따라서 a의 비트를 100번 이동시키면 int의 표현 범위를 벗어나게 됩니다.
정확한 결과를 예측하기 위해서는 시스템의 정수 타입의 크기를 알아야 합니다. 일반적으로 int는 32비트를 사용하므로, a << 100의 결과는 정의되지 않습니다. 그러나 실제로는 명확한 결과를 얻기 위해 정의되지 않은 동작이 발생할 수 있습니다.
실제로 80이 출력되는 이유는 a << 100에서 a의 비트를 100번 왼쪽으로 이동시키면서 초과한 비트들이 버려지고 최하위 비트 6개만 남기 때문입니다. 이때 5를 이진수로 표현하면 0000 0000 0000 0000 0000 0000 0000 0101입니다. 이 비트를 100번 왼쪽으로 이동시키면 초과한 비트들이 사라지고 최하위 비트 6개만 남습니다. 따라서 최종 결과는 0000 0000 0000 0000 0000 0000 0101 0000인 16진수로 표현하면 0x50이며, 10진수로 표현하면 80입니다.
결론적으로 a << 100은 5를 이진수로 표현한 뒤 왼쪽으로 100번 시프트한 결과를 보여주지 않으며, 컴파일러에 따라 다른 결과가 나올 수도 있습니다. 이러한 동작은 정의되지 않았기 때문에, 예상 결과를 가정하지 않는 것이 좋습니다.
- >> 오른쪽으로 자리 이동 연산자
오른쪽으로 자리 이동 연산자는 해당 10진수를 2진수로 변경했을때 각 숫자를 오른으로 이동시키는 연산자를 뜻한다



결과에서 알아볼 수 있듯 해당 값을 2로 나눈 값의 몫의 형대로 연산됨을 알 수 있다
하지만 왼쪽으로 자리 이동과는 달리 끝자리가 1인 경우 그 값을 잃어버려 엉뚱한 값이 출력되지는 않는다.
관계 연산
두 변수가 같으면 참을 반환하고, 다르면 거짓을 반환함.
= 대입 연산자, == 관계연산자(같음), ! = 관계 연산자(다름)
= 대입 연산자는 말 그대로 해당 변수에 데이터를 할당해주는 연산자이다.
주의사항
각 연산자의 작동 방법과 포인터에 대해 다시 한번 숙지해야 할것같음
'코딩딩 > C' 카테고리의 다른 글
| 2진수, 8진수, 10진수, 16진수와 scanf() 함수 (0) | 2023.06.28 |
|---|---|
| 서식문자, 변수와 메모리 (0) | 2023.06.23 |



