11. 진법변환, 비트연산
12. 매크로, 비트연산
13. 삼항 연산자
14. if문, switch문
15. 반복문, for문
11. 진법변환, 비트연산
ㅁ 진법 변환이 왜 필요하냐. 우리는 0~9까지 표현하는 10진수를 쓰고 있음. 컴퓨터는 1과 0밖에 모름.
16진수나 8진수는 주소체계. 렘(주기억장치)의 주소체계가 8진수나 16진수로 되어 있기 때문이다.
ㅁ 어떤 값을 대입할 때 8진수면 앞에 0을 붙임.
어떤 값을 대입할 때 16진수면 앞에 0x를 붙임.
ㅁ 8진수라는건 0~7까지 표현하는거. 그래서 3자리씩 끊음. 4 + 2 + 1 = 7
(1) 5&3
0101
0011 = 0001(이진수) 1(십진수)
(2) 5I3
0101
0011 = 0111(이진수) 7(십진수)
(3) 5^3 <---- 둘이 서로 달라야 참임. exclusive or
0101
0011 = 0110(이진수) 6(십진수)
(4) ~5
- 5는 2진수로는 0101이다.
1의 보수 방식으로 비트를 뒤집으면 1010이 된다.
MSB(최상위 비트)가 1로 시작하는 비트는 음수이므로 0을 가진 비트의 값을 계산한다.
2^2 + 2^0= 5이다.
2의 보수는 1의 보수 방식에서 1을 더한 값이므로 5+1이고 음수 기호를 붙여 최종적으로 -6이 된다.
( ~-6은 5다.)
~-5
음수를 비트로 표현하려면, 우선 부호를 빼고 2진수로 표현한다. 0101. 비트를 반전시키고 1을 더한다.
1011. -5는 1011이다.
~-5는 0100이다. 답은 4.
정리하면, ~양수는 절대값에 1을 더하고 부호 바꾸면 된다.
~음수는 절대값에 1을 빼고 부호 바꾸면 된다.
ㅁ 문제
- x는 16진수로 11이다.
8 4 2 1 8 4 2 1
0 0 0 1 0 0 0 1 (이진수) = 17(십진수)
- 0x0f는 15를 뜻한다. 16진수는 0~9와 A(10), B(11), C(12), D(13), E(14), F(15)를 사용한다.
0 0 0 0 1 1 1 1
- y는 1, z는 31.
12. 매크로, 비트연산
ㅁ 매크로란 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것.
함수도 있지만 함수는 한 번 호출하면 사라져 버림.
매크로는 모든 프로그램에 공통적으로 들어가게 할 수 있음. 전처리기에서 처리해서.
ㅁ #define N 10
- #define: 매크로 선언
- 앞으로 나오는 모든 N을
- 10으로 대체함.
ㅁ #define SQR(X) X*X
- X라는 인자를 받게 되면
- X*X를 수행
ㅁ 매크로 선언 방법은 두가지. 변수처럼 선언하거나 함수처럼 선언.
ㅁ SQR(N);
- 출력결과. 100
ㅁ SQR(N+2);
- 출력결과. 144가 아님. 함수로 선언했을 때는 N+2를 계산하는게 맞는데 매크로로 선언했을 때는 그대로 넘김.
- 10 + 2 * 10 + 2 = 32다.
ㅁ 시프트 연산(>>)
- 비트 연산이라 이진수로 바꿔야 함.
(1) 10 >> 2
- 10을 이진수로 변환하면 1010. 이걸 우측으로 2개 밀어라. 그러면 10(이진수), 2(십진법)
- 밀어진 것들은 아예 사라짐.
(2) 10 << 2
- 0000 1010이니까 0010 1000이 됨. 40(십진법)
- 새로 생겨난 것들은 0이다.
ㅁ 문제
- i = 0이다. 정수 나누기 정수는 정수이므로 소수점 아래는 버린다.
value1은 1이므로 0000 0001
value2는 2이므로 0000 0010
j = 0000 0000
k = 0000 0011 = 3(십진법)
if 조건은 j는 거짓이므로 &&오른쪽은 보지도 않고 0이 된다. II 오른쪽도 거짓이므로 els문 수행.
m = j + k = 3
i = 0, j = 0, k = 3, m = 3이다. 출력형식에 맞게 출력하면,
출력결과.
i = 0.0 j = 0 k = 3 m = 003
13. 삼항 연산자
ㅁ 삼항 연산자
- 조건에 따라서 다른 명령을 수행 하는 연산자.
- 구조: 조건 ? 참 : 거짓
ㅁ 예제
int a = 10>5 ? 10 : 5;
printf("%d", a); 출력결과는 10
ㅁ 문제
b = 40
출력결과. b=40
14. if문, switch문
ㅁ switch문은 break안 걸면 그 다음의 것들와 default까지 다 나옴.
switch조건에 맞는 인자가 없으면 그냥 default 출력
ㅁ 문제
답. 1
만약 전부 break가 없다고 가정하면,
출력결과는
1
3
3
어렵게 내면 case를 여러개 두고 어떤건 break를 쓰고 어떤건 break를 안씀.
break가 있을때까지 수행한다. break있으면 탈출한다.
15. 반복문, for문
ㅁ 변수, 제어문(if문, switch문), 반복문만 가지고도 프로그램 충분히 짤 수 있다.
포인터, 배열 안 써도 됨. 실제 프로그램도 제어문과 반복문의 덩어리다.
ㅁ 반복문 종류
(1) for
- 정해진 횟수만큼 반복
(2) while
- 조건이 만족하는 동안 반복
(3) do ~ while
- 무조건 한 번 수행 후 조건이 만족하는 동안 반복
ㅁ for 구조
- for (초기식; 조건식; 증감식)
{ 수행하는 작업들 }
초기식은 처음 딱 한 번만 수행. 그 다음 조건식. 그 다음 작업 수행. 그 다음 증감식. 그 후 조건식.
ㅁ 문제
j=2, sum = 1이 되고 j는 7 j=7, sum = 2가 되고 j는 12 j=12, sum = 3이 되고 j는 17
j=17, sum = 4이 되고 j는 22 j=22, sum = 5가 되고 j는 27 j=27, sum = 6이 되고 j는 32
j=32, sum = 7이 되고 j는 37 j=37, sum = 8가 되고 j는 42 j=42, sum = 9이 되고 j는 47
j=47, sum =10이 되고 j는 52 j=52, sum = 11가 되고 j는 57 j=57, sum =12이 되고 j는 62
j=62, sum = 13이 되고 j는 67 j=67, sum = 14이 되고 j는 72
출력결과. 14
'깨알 c언어' 카테고리의 다른 글
깨알 c언어 ch.26 ~ 30 (0) | 2024.03.08 |
---|---|
깨알 c언어 ch.21 ~ 25 (0) | 2024.02.22 |
깨알 c언어 ch.16 ~ 20 (0) | 2024.02.22 |
깨알 c언어 ch.6 ~ 10 (0) | 2024.02.21 |
깨알 c언어 ch.1 ~ 5 (1) | 2024.02.21 |