C언어 변수 & 연산자 데이터의 표현

    2018-02-06 05:32:09 작성

    컴퓨터는 모든 데이터를 2진수를 기반으로 표현합니다.
    그래서 2진수를 이해해야 합니다.

    2진수는 0, 1로 구성되어있고 값이 2가 되면 자릿수가 증가되는것입니다.
    다음의 표는 10진수 2진수 8진수 16진수를 표현합니다.

    10진수 2진수 8진수 16진수
    0 0 0 0
    1 1 1 1
    2 10 2 2
    3 11 3 3
    4 100 4 4
    5 101 5 5
    6 110 6 6
    7 111 7 7
    8 1000 10 8
    9 1001 11 9
    10 1010 12 A
    11 1011 13 B
    12 1100 14 C
    13 1101 15 D
    14 1110 16 E
    15 1111 17 F
    16 10000 20 10
    17 10001 21 11
    • 10진수는 9 > 10이 될때 자릿수가 증가합니다.
    • 2진수는 1 > 2가 될때 자릿수가 증가합니다.
    • 8진수는 7 > 8이 될때 자릿수가 증가합니다.
    • 16진수는 9 > 10이 될때 자릿수가 증가하면 안되기 때문에 알파벳 A(10) ~ F(15) 까지 표현합며,
      십진수 15 > 16이 될때 자리수가 증가합니다.

    데이터의 표현단위는 비트(bit)와 바이트(byte)가 있습니다.
    컴퓨터는 2진수로 표현하고 2진수의 자릿수 1개를 1bit라고 하며 8개의 bit를 모아서 1byte라고 합니다. 8bit = 1byte

    16진수가 필요한 이유는 2진수의 경우 0과 1로만 구성되어 큰 숫자가 될 경우 사람이 보기가 매우 어려워집니다.
    2진수 4개가 16진수 1개로 표현되기 때문에 16진수로 표현하게 되면 간단히 표현 및 파악 할 수 있습니다.


    10진수 > 2진수 변환

    ex) 13 이라는 수를 2진수로 변환한다고 하면 다음과 같이 계산할 수 있다.

    ※ 16진수 및 8진수로 변환하려면 2로 나누는 대신 16또는 8로 나누면 됩니다.​


    2진수 > 10진수 변환

    ex) 2진수 10101101 을 10진수로 변환 한다면 다음과 같이 계산할 수 있다.


    2진수 > 8진수 변환

    ex) 2진수 10101101 을 8진수로 변환한다면 다음과 같이 계산할 수 있다


    2진수 > 16진수 변환

    ex) 2진수 10101101 을 16진수로 변환한다면 다음과 같이 계산할 수 있다


    컴퓨터에서 정수의 표현방식

    예를 들어 1byte의 크기를 갖는 정수는 00000101 이러한 형식의 2진수로 표현이 됩니다.
    정수의 자료형에는 부호가 있는(signed) 자료형과 부호가 없는(unsigned) 자료형이 있습니다.
    부호가 있는 자료형은 변수 선언시 signed를 생략하여 선언하며 이때 부호는 가장왼쪽의 bit가 0이면 양수, 1이면 음수가 되는 부호 비트로 사용됩니다.

    양의정수 5의 표현

    음의 정수 -5의 표현


    8진수와 16진수를 이용한 데이터의 표현방법

    c언어 에서는 다음과 같이 변수에 값을 대입할때
    8진수와 16진수의 표현방법으로 값을 채울 수 있습니다.

    #include <stdio.h>
    
    int main(void) {
        int n1 = 10; // 특별한 선언이 없으면 10진수
        int n2 = 012; // 0으로 시작하면 8진수
        int n3 = 0xA; // 0x로 시작하면 16진수
    
        printf("n1 : %d\nn2 : %d\nn3 : %d\n", n1, n2, n3);
        return 0;
    }