서식문자, 변수와 메모리
서식문자
해당 코드의 결과를 예측해보자.
중간 \n (newline) 이스케이프 시퀀스가 들어가서 결과는 이런식으로 나온다.
그렇다면 해당 코드의 결과는 어떤식으로 출력될까?
1번째 print와 2번째 print는 “” 안에 쌓여있으므로 문자열로 출력이 가능하다. 하지만 3번째 print문에 있는 숫자 100은 문자열이 아닌 데이터 형식으로 선언되어 연산은 가능하지만 출력이 불가능하다. 이를 해결해줄 수 있는 서식문자가 %d 인것이다. %d는 2진수로 저장되어있는 데이터를 10진수의 문자열로 출력하라는 서식문자로 %g 또한 실수의 문자열로 출력하라는 서식 문자이다.
마지막으로 %d 서식문자 각각에 데이터를 넣어줄 수 있다는 사실도 확인할 수 있다.
그렇다면 실수 데이터를 정수를 출력하는 서식문자인 %d 로 출력하려 하면 어떤 일이 벌어질까?
정답은 0이다
실수 데이터와 정수 데이터의 저장 방식이 달라 실수 데이터를 정수로 출력하면 0이 출력된다.
즉, 출력하는 데이터의 형식을 맞춰줘야 한다.
데이터는 연산이 가능해 둘다 답이 30으로 출력된다.
마지막으로 서식 문자의 종류를 알아보자
서식 문자 | 설명 |
%d, %i | 10진수 정수(양수, 음수 표현 가능), decimal (10진법) |
%x, %X | 16진수 정수(양수만 가능, x는 소문자, X는 대문자, hexadecimal (16진법) |
%o | 8진수 정수(양수만 가능, 대문자 O는 안됨), octal (8진법) |
%f, %lf | 10진수 실수(양수, 음수 표현 가능), float (부동 소수점 방식) |
%c | 한개의 문자, character |
%s | 문자열, string |
%u | 10진수 정수 (양수만) |
%e | e 표기법에 의한 표시 |
%% | % 기호 표시 |
변수와 메모리 이해
해당 코드의 결과를 예측해보자.
정답은 10, A, 10이다. 1번째는 정수형 10, 2번째는 A, 3번째는 실수형 10이 출력됐다. 왜 두번째 print는 A를 출력했을까? 정답은 아스키 코드로 65번이 알파벳 A기 때문이다. 해당 내용은 알고리즘 문제를 풀때 자주 응용해야하는 내용이므로 알아두면 좋다.
아스키 코드는 통신시 2진수로 표기된 1의 개수가 무조건 짝수로 이루어져야 하기 때문에 8byte 자리는 짝수와 홀수의 자리를 맞춰주기 위해 사용된다.
변수를 생성하는 방법은 먼저 해당 변수의 자료형을 선언한 뒤 그 변수에 들어갈 데이터를 삽입해주는 과정을 거쳐 생성하게 된다.
해당 코드를 실행시킬 시 50, 50이 출력된다.
A와 B 데이터 바꾸기
A와 B의 데이터를 바꾸려면 물이 가득 찬 두개의 컵을 생각해보면 쉽다.
지금 상태에서 두 컵에 담긴 내용물을 서로 섞이지 않게 바꿀 수 있는 방법은 없다.
두 컵의 내용물을 바꾸려면 비어있는 하나의 컵이 더 필요할 것이다.
우선 비어있는 컵에 A의 내용물을 붓고 B의 내용물을 A 안에 붓는다. 마지막으로 temp의 내용물을 B에 부어버리면 두 컵 안의 내용물이 완전히 바뀌게 된다.
해당 내용을 코드로 구현해보면 다음과 같다.
A의 값은 10으로 B의 값은 50으로 변경되어 있는 모습을 확인할 수 있다.