[열혈C프로그래밍] chapter 4. 데이터 표현 방식의 이해

chapter 4

데이터 표현 방식의 이해

  1. 컴퓨터가 데이터를 표현하는 방식 n진수: n개의 개수로 데이터를 표현한 진수 => 2진수: 0 , 1 10진수: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 16진수: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 컴퓨터에서 16진수의 사용 이유: 본래 컴퓨터의 세계는 0,1 인 2진수로만 이루어져있지만, 데이터를 2진수로만 표현하기에는 데이터의 길이가 너무 길어진다. 근데 16진수는 2진수의 네자리를 한자리로 표현가능하므로 좀 더 데이터를 간결하게 표현할 수 있다. 따라수 16진수를 컴퓨터에서 많이 사용한다. ex) 주소값 표현 : 0x00000000, 0x0000A011 …
      int num1 =10; //특별한 선언이 없으면 10진수 선언
      int num2 =0xA; //0x로 시작하면 16진수로 인식
      int num3 =012; //0로 시작하면 8진수로 인식
    

데이터 단위: (1) Bit = 0,1 을 표현할 수 있는 최소 단위 (2) Byte = 8Bit (3) KB = 1024Byte (4) MB = 1024KB (5) GB = 1024MB

단위 나타낼 수 있는 크기
1bit : x 2^1 = 2
2bit : xx 2^2 = 4
4bit : xxxx 2^4 = 16
1byte :xxxxxxxx 2^8 = 256
2byte : xxxxxxxx 2^16 = 65,536
4byte : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2^32= 4,294,967,296
8byte 2^64

==> int는 정수 자료형으로 int로 cpu(컴퓨터)의 주소를 모두 나타낼 수 있어야 한다. (? 이거 다시 한번 물어보기) 따라서 16bit 주소 체계의 cpu는 int의 크기가 2byte(16bit), 32bit 주소 체계의 cpu는 int의 크기가 4byte(32bit), 64bit 주소 체계의 cpu는 int의 크기가 8byte(64bit) 이어야 한다. 그래서 int의 크기가 계속 변하니 cpu에 맞는 자료형이 생긴것 이다. 그게 바로 int16_t, int32_t, int64_t

  1. 정수와 실수의 표현방식
    1. 정수의 표현방식 => 정수를 1바이트로 표현한다고 할때 맨 왼쪽 비트가 부호비트이다. 00000001 : 양수 10000001: 음수 => 음수는 2의 보수를 취해야 한다. 1에서 -1 만들기 00000001 => 2의 보수: 11111110 => +1 : 11111111 (= -1) 11111111 읽기 : 2의 보수: 00000000 => +1 : 00000001 절대값이 1이므로 따라서 -1이라 읽는다. * 2의 보수법: 1의 보수(다 뒤집기)를 취하고 1을 더한다.

    2. 실수의 표현방식 실수는 정수와 다르게 값을 표현하는데 있어서 오차가 존재한다. 오차가 존재하는 이유: +-(1.m)*2^(e-127)로 값을 표현해서.

  2. 비트연산자 (1) & 연산자: AND 연산자 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1

    (2) 연산자: OR 연산자
    0 0 = 0
    0 1 = 1
    1 0 = 1
    1 1 = 1

    (3) ^ 연산자: XOR 연산자 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0

    (4) « 연산자: LeftShift (비트열 왼쪽으로 이동) 01(2)«1 = 10(2) 01(2)«2 = 100(2)

    (5) » 연산자: RightShift (비트열 오른쪽으로 이동) 100(2)»1 = 010(2) 100(2)»2 = 001(2)