컴퓨터 과학 기초

내가 모르는/헷갈리는 부분만 정리함

컴퓨터 데이터는 0,1로만 다루어짐
데이터의 최소 단위 1비트, 8비트가 모여 1바이트 -> 메모리 저장의 최소 단위
1바이트 2^8=256 표현 가능

1. MSB, LSB

가장 왼쪽 최상위 비트, MSB(Most Significant Bit)
가장 오른쪽 최상위 비트, LSB(Most Significant Bit)
부호가 있는 데이터에서 MSB는 부호의 의미를 가짐(0이면 양수)

2. 바이트 오더링

2바이트 이상의 데이터 -> 연속적으로 저장
각 바이트 정렬되는 방식 -> 바이트 오더링
비트 아니고 바이트임!!!
1. 빅 엔디안: 가장 왼쪽에 있는 바이트부터 입력
네트워크 상에서 많이 쓰임 (SPARC CPU)
2. 리틀 엔디안: 가장 오른쪽에 있는 바이트부터 입력
intel x86,x86-64 CPU에서 사용

문자열 저장 -> 바이트 오더링 고려 X
문자열이 아닌 데이터 -> 리틀 엔디안으로 저장

3. 시프트 연산자

n만큼 시프트한 결과 == 2^n으로 곱하거나 나눈 값

시프트 연산자 설명
x « n 비트를 n만큼 왼쪽으로 이동
오른쪽 빈칸은 0으로 채움
==x*2^n
x » n
(산술 시프트)
비트를 n만큼 오른쪽으로 이동
왼쪽 빈칸은 MSB와 동일한 비트 값으로 채움
==x/2^n
(양수, 음수 모두 부호 유지)
x »> n
(논리 시프트)
비트를 n만큼 오른쪽으로 이동
왼쪽 빈칸은 0으로 채움
(음수 부호 유지 X)

4. 연산자 활용

  1. AND 연산으로 비트 마스킹
  2. AND 연산과 시프트 연산으로 특정 비트/바이트 가져오기
    • 하위 1바이트만 가져오기: 0x000000FF와 AND
    • 상위 1바이트만 가져오기: 24번 우측으로 논리 시프트
    • 상위에서 두번째 바이트 가져오기: 16번 우측으로 시프트 후 0x000000FF와 AND
    • 하위에서 1바이트의 상위 4비트 가져오기: 4번 우측으로 시프트 후 0x0000000F와 AND
  3. XOR 연산으로 암호화
  4. 시프트 연산으로 곱셈, 나눗셈

5. 인코딩, 디코딩

인코딩 -> 데이터를 특정 형식으로 변환
디코딩 -> 인코딩한 데이터를 원본으로 변환
1. 아스키 코드
7비트 문자 표현, 1비트는 오류 체크, 총 1바이트 크기
2. 유니코드
아스키 코드의 문제점: 다양한 언어와 문자를 포용하기에 범위가 작음
국제 표준, 32비트로 표현
유니코드의 처음 128개 문자 == 아스키 코드
인코딩 형식 다양: utf-8, utf-16, utf-32
ex) utf-8
1~4바이트의 가변적 크기 -> 문자 1개
3. URL 인코딩
알파벳 대소문자, 숫자, 일부 특수 문자
허용되지 않는 문자 :/?#[]@!$&’()*+,;=%공백
-> url 인코딩: %아스키코드(16)
공백은 + 혹은 %20
4. base64 인코딩
이진 데이터 -> 아스키 문자(텍스트)

  1. 이진 데이터를 비트 나열로 표현, 6비트씩 끊기 (부족한 부분은 0으로)
  2. base64 테이블에서 대응하는 문자 치환
  3. 글자수가 4배수 되도록 ‘=’ 반복: 패딩

인코딩 도구

6. 운영체제

사용자 <- 운영체제 -> 하드웨어
운영체제의 역할: 하드웨어 자원 효율 배분, CPU 스케줄링, 메모리 공간 분배, 입출력 장치와 정보 교환
운영체제의 구성요소

  1. 커널: 하드웨어 관리 수행 프로그램
  2. 쉘: 커널과 사용자 사이에서 명령 전달
    운영체제의 종류
  3. windows
  4. unix