정보처리기사

[정보처리기사] C언어 특강 11강 정리

jaeheon0520 2024. 9. 26. 01:32

 

진법 변환

 

비트연산자

기호 의미
& 비트 논리곱(AND) 5 & 3
| 비트 논리합(OR) 5 | 3
^ 비트 배타적 논리합(XOR) 5 ^ 3
~ 비트 NOT ~5 (양수이면 절댓값에 +1하고 - 붙이기, 음수이면 절댓값에 -1하고 + 붙이기)
>> 비트값을 우측으로 이동 5 >> 3
<< 비트값을 좌측으로 이동 5 << 3

 

풀이:

 

5(10) = 0101(2)

2(10) = 0011(2)

ㅡㅡㅡㅡㅡㅡㅡㅡ

& 연산 = 0001(2) = 1

| 연산 = 0111(2) = 7

^ 연산 = 0110(2) = 6

~연산은 시험에 안나옴

 

비트연산 연습하기

① 논리곱(& 연산자)

 

19 = 10011(2)

13 = 01101(2)

ㅡㅡㅡㅡㅡㅡㅡ

        00001(2) = 1

 

② 논리합(| 연산자)

 

19 = 10011(2)

13 = 01101(2)

ㅡㅡㅡㅡㅡㅡㅡ

        11111(2) = 31

 

④ 비트 NOT ( ~) 연산자

 

~16 = -17

~-16 = 15

 

연습문제

#incldue <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);
}

 

나의 풀이:

 

x = 16진수 11 = 10진수 17 = 10001(2)

0x0f = 01111(2)

10001(2)

01111(2)

ㅡㅡㅡㅡ

y = 00001(2) = 1

z = 11111(2) = 31

 

강의 풀이:


0x 가 붙었다 == 16진법이라는 의미

16진법 = 0~9 에다가 10부터는 abcdef 사용, 총 16개의 문자

0x11을 10진법으로 변환하는 과정 -> 0x11은 2진법을 네 자리씩 끊었을 때 각 자리수가 1, 1이라는 의미(8421/8421) = (1/1) = 17

0x0f 와 같은 경우도 마찬가지 (8421/8421) 에서 (0/1111) = (0/f) = 15

계산 과정은 나와 동일

 

정답: x = 17, y= 1, z= 31