깨알 C언어 11강~20강 정리
11강. 진법변환, 비트 연산
컴퓨터는 1과 0밖에 모르기 때문에 바꾸어 줘야 한다.
주기억장치는 보통 8진수 16진수를 취한다.
비트 연산은 and와 or
8진수는 %o 16진수는 %x를 준비해뒀다. 값에서 0o는 8진수, 0x는 16진수로 보면 된다.
- 진법 변환
1) 10진수 to 2진수 : 2로 쭉 나눈 뒤에 거꾸로 쓴다.
2) 2진수 to 8진수 : 2진수를 3자리씩 자른다. 각각의 영역에서 1이 들어간 값을 더해 합해준다.
3) 2진수 to 16진수 : 2진수를 4자리씩 자른다. 각각의 영역에서 1이 들어간 값을 더해 합해준다.
- 비트 연산
& 논리곱 AND (ex 5&3) 각각을 2진수로 바꾼 뒤, 둘다 참인 것이 1이 된다.
| 논리합 OR (ex 5 | 3) 각각을 2진수로 바꾼 뒤, 둘중 하나만 1이면 1이 된다.
^ 배타적 논리합 XOR (ex 5^3) 각각을 2진수로 바꾼 뒤, '반대인 경우'에만 1이 된다.
~ NOT (ex ~5) 만약 양수면 +1하고 마이너스를 붙인다. 음수면 -1한 뒤에 +를 붙인다.
💡~ NOT은 실제 문제로는 거의 나오지 않으니 계산 방법만 알아두면 된다.
16진수의 경우 0에서 9까지 이후는 알파벳으로 쓴다.
0xA = 10
0xB = 11
0xC = 12
0xD = 13
0xE = 14
0xF = 15
0x10 = 16
0x0f의 경우 0f, 즉 0000 1111 라고 생각하면 되는 것이다.
12강. 매크로, 비트 연산
매크로: 반복 작업을 쉽게 하기 위한 것들. 전처리기에서 처리한다.
#define N 10 변수처럼 선언, 모든 N은 앞으로 10이다.
#define SQR(X) X*X 함수처럼 선언, X를 인자로 받아 X*X를 수행한다.
🤔SQR(N+2); 는? 매크로로 올린 경우 함수와 다르게 연산한다.
: 144가 아니라 식 자체를 넘기는 것이다. 즉 10+2*10+2가 넘어가면, 10+20+2가 되어 32가 답이다.
- 비트 연산자
>> 우쉬프트 : 우측으로 밀어버림.
<< 좌쉬프트 : 좌측으로 밀어버림.
예제
1) 10>>2 : 일단 2진수로 바꾼다. 1010 우측으로 2개 떨어뜨리라는 의미. 10만 남기 때문에, 2가 된다.
2) 10<<2 : 2진수로 바꾼 뒤 2만큼 0을 더 붙여준다. 101000이기 때문에 값은 40이 된다.
13강. 삼항 연산자
예시 (a>10)? a+a : a*a;
20은 10보다 크기 때문에 참인 경우 a+a식이 수행된다.
14강. if문, switch문
- 조건에 따라 다른 명령어들을 수행하는 if문.
- 주어진 값에 맞는 명령어들을 수행하는 switch문. 값에 break를 걸어준다.
switch문의 경우, break;가 있고 없고에 따라 답이 달라지는 경우가 많다.
복잡한 문제에서는 이걸로 장난을 칠 수 있으니 기억할 것.
15강- 17강. 반복문, for문 / while문 / do~while문, for~while문
내부에 있는 코드를 반복시키는 것이 반복문이다.
for문 : 정해진 횟수만큼 반복한다.
while문 : 조건이 만족하는 동안 반복한다.
do while문 : 처음 무조건 한 번 수행한 뒤 조건 만족하는 동안 반복한다.
18강. while, if문
19강-20강. for, continue, break
continue - 더이상 아래 문장을 실행하지 않고 반복문 처음으로 돌아가는 것
break - 아예 반복문을 빠져나가는 것