본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
sw사관학교 정글 2기/컴퓨터 시스템

c - 비트 연산자, 매크로

by 금의야행 2021. 9. 10.

 

 

 

자료 출처: https://dojang.io/

 

코딩 도장

 

dojang.io

 

 

 

목차

     

    연산자

    https://dojang.io/mod/page/view.php?id=172

    비트 연산자

     

    &, | 을 이용한 비트 연산

     

    & 연산자

    두 비트가 모두 1일 때만 1. 

     

     

    or ( | ) 연산자

     

    두 비트가 모두 0 일 때만 0.

     

     

    **비트 연산의 의미 및 이해**

     

     

    비트란 디지털에서 정보를 표현하는 가장 기본적인 단위.

     

    C 언어에서 가장 작은 크기의 변수는 char 로 1byte 크기이다. 

    아이러니하게도 C 언어에서 이진수를 표현하는 방법은 없다. 

     

    2 진수 대신 16 진수로 표현하는데 이는 편의성 때문이다.

     

    2진수를 16진수로 변환하는 방법은 하위 4비트와 상위 4비트를 나누어서 계산하기만 하면 된다.

     

    이진수 0110 0100 은 (2^7) * 0 + (2^6) * 0 +  ~~~ + (2^1) * 0 + (2^0) * 0으로 10진수로 변환할 수 있는데 이 과정을 고려하면 4비트 단위로 쪼개서 16진수로 변환 시킬 수 있다. 4 비트로 만들 수 있는 십진수 최대 수는 00001111 = 15 로 0001 0000 = 16이 되는 특성은 16진수와 같다.

     

    dec = 10진수 , bin = 2진수 , hex = 16진수

     

     

     

    unsigned char, int, float 등등을 사용해 비트 연산시 부호에 영향이 없도록 한다. 

     

     

    시프트 연산자

     

    unsigned char num1 = 3; // 3 : 0000 0011
    
    (num1<<3);  // 24 : 0001 1000
    (num1>>2);  // 6 : 0000 0110

     

     

     

    매크로

     

    #define (매크로 이름) (초기값)     

     

    note: ' ; ' 가 필요 없고 띄어쓰기가 중요하다. 줄 바꿈도 안됌!

     

     

    매크로를 매크로로 정의하기

     

    #define ARRAY_SIZE 10 // 10을 ARRAY_SIZE로 정의

    #define DEFAULT_ARRAY_SIZE ARRAY_SIZE // ARRAY_SIZE를 DEFAULT_ARRAY_SIZE로 정의

     

     

    매크로 해제 : #undef (매크로 이름)

     

     

    함수 모양의 매크로 정의하기

     

    • #define 매크로이름(x) 함수(x)
    • #define 매크로이름(x) 코드조합

     

    예시:

    #define PRINT_NUM(x) printf("%d\n", x)

     

     

     

     

    여러 줄을 묶어서 정의

     

    #define 매크로이름 코드1 \ 코드2 \ 코드3

     

     

    note: 매크로를 정의 할 때는 연산자 우선순위를 주의해야한다. 괄호를 꼬박꼬박 쳐주자.

     

    함수와 매크로의 차이 및 장단점

    C 언어와 같이 구조화된 언어에서는 소스코드 중복을 줄이고 코드의 재사용성을 높이기 위해서 함수라는 개념을 제공합니다. 하지만, 함수는 호출될때 스택 프레임이 일어나기 때문에 속도가 느려지는 단점이 있습니다. 따라서 코딩할때는 함수처럼 구성하면서 실제 기계어로 번역될때는 직접 코딩한것처럼 처리해주는 매크로 함수 기법을 제공하는겁니다.

    정리해보면 함수는 실행파일의 크기를 줄여주고 코드의 재사용성을 높여주지만 실행속도가 늦어지는 단점이 있습니다. 하지만, 매크로 함수는 실행파일의 크기가 커지고 스택프레임을 사용할 수 없기 때문에 재귀호출구조를 만들수 없다는 단점은 있지만 실행속도가 증가하는 장점이 있습니다.

     

     

     

     

    삼항 연산자

     

     

    알면 쉽고 모르면 어려운 놀라운 세계.

     

    note:
    처음 C 언어가 개발될 당시에는 따로 불 자료형이 없었습니다.
    그래서 숫자 1을 참, 0을 거짓으로 정하였고 지금까지도 바뀌지 않고 그대로 사용되고 있습니다.

     

    이건 뭘까

    #define MAX(x, y) ((x) > (y) ? (x) : (y))
    
    size = (words % 2) ? (words + 1) * WSIZE : words * WSIZE;

    삐빅

    해석 불가능.

    공부 시작.

    답안 도출 성공. 

    답 : 삼항 연산자

    댓글