
19를 2진수로 변환해보자.

나머지를 역순으로 읽으면 10011이다.
따라서, 19를 2진수로 변환하면 10011이다.
하지만 위 방법보다 훨씬 간편한 방법이 있다.
만약 19의 2진수를 구한다고 할 때,
32 16 8 4 2 1 순으로 숫자들을 정렬해놓고,
19를 만들기 위해 필요한 숫자에 1을 채워넣으면 된다.
19를 만들기 위해서는 16+2+1을 수행하면 된다.
따라서 0 1 0 0 1 1 -> 1 0 0 1 1이 19의 2진수다.
2진수를 8진수로 만들기 위해선 세가지 스텝을 거쳐야 한다.
2진수를 16진수로 만들기 위해선 2진수를 8진수로 만드는 것과 거의 유사하다.
2진수 -> 8진수/16진수의 스텝을 반대로 수행하면 된다.


5,3 의 여러가지 비트연산 결과를 구해보자.
논리곱: 5 & 3 = 1
둘다 참이면 참이다.
논리합: 5 | 3 = 7
둘 중 하나만 참이여도 참이다.
배타적 논리합: 5 ^ 3 = 6
둘이 달라야 참이다.
실행 결과를 구하라.
#include<stdio.h>
void main() {
int x = 0x11;
int y,z;
y = x & 0x0f;
z = x | 0x0f;
printf("x=%d, y=%d, z=%d", x, y, z);
}

매크로: 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것.
#define N 10
#define SQR(X) X*X
SQR(N);
SQR(N+2);
라고 풀면 틀리는 것이다. 왜냐하면 매크로 != 함수이기 때문이다.
N+2가 X가 된다.
따라서 N+2 N+2가 된다. 10+2 10+2 이므로, 연산자 우선순위를 적용하면 10+(2*10)+2이므로, SQR(N+2) = 20+10+2 = 32다.
좌시프트: 너 죽어!! 우측의 요소를 낭떠러지로 떨어뜨린다.
우시프트: 너 이리 들어와!! 0을 우측에 추가한다.


condition ? expression1 : expression2;
condition이 참이면 expression1이 실행되고, 거짓이면 expression2가 실행된다.
#include <stdio.h>
int main() {
int age;
int ticketPrice;
printf("클래식 연주회 티켓 가격 계산기\n");
printf("관객의 나이를 입력하세요: ");
scanf("%d", &age);
// 삼항 연산자를 사용하여 티켓 가격 결정
ticketPrice = (age < 18 || age >= 60) ? 5000 : 10000;
printf("관객의 나이: %d\n", age);
printf("티켓 가격: %d원\n", ticketPrice);
return 0;
}
void main(void) {
int a,b;
a = 20;
b = (a > 10) ? a+a : a*a;
printf("b=%d\n",b);
}
a = 20;
b = 20이 10보다 크다는 것은 사실이다. 따라서 20+20=40 이 b에 들어간다.
printf("b=%d\n", b)는 "b=40"을 출력한다.
%d는 b와 매핑되고, \n은 줄바꿈이다.
#include <stdio.h>
int main() {
int age;
int ticketPrice;
printf("클래식 연주회 티켓 가격 계산기\n");
printf("관객의 나이를 입력하세요: ");
scanf("%d", &age);
// if문을 사용하여 티켓 가격 결정
if (age < 18) {
ticketPrice = 5000; // 청소년 할인
} else if (age >= 60) {
ticketPrice = 5000; // 노인 할인
} else {
ticketPrice = 10000; // 일반 가격
}
printf("관객의 나이: %d\n", age);
printf("티켓 가격: %d원\n", ticketPrice);
return 0;
}
switch (변수) {
case 값1:
// 변수의 값이 값1일 때 실행되는 코드
break;
case 값2:
// 변수의 값이 값2일 때 실행되는 코드
break;
default:
// 변수의 값이 어떤 case에도 해당하지 않을 때 실행되는 코드
}
#include <stdio.h>
int main() {
int choice;
printf("클래식 연주회 음악 장르 선택기\n");
printf("원하는 장르를 선택하세요:\n");
printf("1. 교향곡\n");
printf("2. 협주곡\n");
printf("3. 실내악\n");
printf("4. 오페라\n");
printf("선택: ");
scanf("%d", &choice);
// switch문을 사용하여 음악 장르 결정
switch (choice) {
case 1:
printf("선택한 장르: 교향곡\n");
break;
case 2:
printf("선택한 장르: 협주곡\n");
break;
case 3:
printf("선택한 장르: 실내악\n");
break;
case 4:
printf("선택한 장르: 오페라\n");
break;
default:
printf("잘못된 선택입니다. 1부터 4 사이의 숫자를 선택하세요.\n");
break;
}
return 0;
}
#include <stdio.h>
int main() {
int count = 10;
// do-while문: 조건이 처음부터 거짓이지만, do 블록은 최소 한 번 실행됨
do {
printf("이 메시지는 무조건 한 번 출력됩니다.\n");
printf("현재 카운트: %d\n", count);
count++;
} while (count < 10); // 조건이 처음부터 거짓
printf("반복문 종료 후의 카운트: %d\n", count);
return 0;
}
// 이 메시지는 무조건 한 번 출력됩니다.
// 현재 카운트: 10
// count++; (이 때, count = 11)
이 코드는 do-while문이므로, 조건이 거짓임에도 불구하고 do문 안에 있는 세 줄의 코드가 한 번 실행된다.
skip