카테고리 없음
CS50 Study
택이더
2023. 5. 30. 18:21
2진법
- 0과 1로만 데이터를 표현하는 방식
비트
- 2진법에서 하나의 자릿수를 표현하는 단위
- 0과 1 두 가지 값만 가질 수 있는 측정 단위
비트열
- 비트 한 개는 많은 양의 데이터를 나타내기에 턱없이 부족하기에 비트열을 사용
- 비트열들이 모여 더 큰 단위들이 될 수 있다.
- 바이트 => 8 비트, 킬로바이트 => 1,000 바이트 ...
문자의 표현
- ASCII : 128개의 부호로 정의된 문자의 표현
- Unicode : 더 많은 비트를 사용하여 더 다양한 다른 문자들도 표현가능하도록 지원 (ex. 이모티콘)
그림, 영상, 음악의 표현
- 빨간색, 초록색, 파란색을 띄는 수만은 점들의 조합으로 표현 => RGB 방식
C언어
- 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 정확하게 명시해야 한다.
데이터 타입
- bool: 불리언 표현, (예) True, False, 1, 0, yes, no
- char: 문자 하나 (예) 'a', 'Z', '?'
- string: 문자열
- int: 특정 크기 또는 특정 비트까지의 정수 (예) 5, 28, -3, 0
- long: 더 큰 크기의 정수
- float: 부동소수점을 갖는 실수 (예) 3.14, 0.0, -28.56
- double: 부동소수점을 포함한 더 큰 실수
형식 지정자
- %c : char
- %f : float, double ('.원하는 자리수'를 넣어 소수점 n번째 자리까지 표시 가능)
- %i : int
- %li : long
- %s : string
사용자 정의 함수의 장점
1. 코드의 가독성이 올라간다.
2. 유지보수가 쉬워진다.
3. 코드를 효율적으로 작성할 수 있다.
명령어를 실행했을 때의 과정
전처리 -> 컴파일 -> 어셈블링 -> 링킹
1. 전처리: 전처리기에 의해 수행, #으로 시작되는 C소스 코드는 전처리기에게 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려준다.
2. 컴파일: C코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일한다. (컴퓨터가 이해할 수 있는 언어와 가깝도록)
3. 어셈블: 어셈블리 코드를 오브젝트 코드로 변환한다. (연속된 0과 1들로 바꿔주는 작업 -> 어셀블러에 의해 수행)
4. 링크: 프로그램이 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 할 경우 필요하다.
디버깅
- 코드에 있는 버그를 식별하고 고치는 과정이다.
메모리
- bool: 불리언, 1바이트
- char: 문자, 1바이트
- int: 정수, 4바이트
- float: 실수, 4바이트
- long: (더 큰) 정수, 8바이트
- double: (더 큰) 실수, 8바이트
- string: 문자열, ?바이트
C언어 함수
- strlen(): 문자열의 길이를 알려주는 함수 (string.h 라이브러리)
- tolower(), toupper(): 문자를 대소문자로 변환해주는 함수 (ctype.h 라이브러리)
선형 검색
- 원하는 원소가 발견될 때까지 처음부터 마지막 자료까지 차례대로 검색한다.
- 정확하지만 아주 효율적이지 못한 방법 (? 최악의 경우 리스트의 모든 원소를 확인)
버블 정렬
- 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식 (단 두개의 요소만 정렬해주는 좁은 범위의 정렬)
- 최대: O(n^2) 최소: Ω(n^2)
선택 정렬
- 가장 작은 수(혹은 가장 큰 수)를 찾아 첫 번째 위치(혹은 가장 마지막 위치)의 수와 교환해주는 방식
- 최대: O(n^2) 최소: Ω(n^2)
실행시간의 상한
- O(n^2): 선택 정렬, 버블 정렬
- O(n log n)
- O(n): 선형 검색
- O(log n): 이진 검색
- O(1)
실행시간의 하한
- Ω(n^2): 선택 정렬, 버블 정렬
- Ω(n log n)
- Ω(n)
- Ω(log n)
- Ω(1): 선형 검색, 이진 검색