분류 전체보기
[시스템 프로그래밍] 어셈블리어
[시스템 프로그래밍] 어셈블리어
2022.10.13C같은 고급 언어를 사용해 코드를 작성하면, 작성한 코드를 어셈블리어로 변환하는 과정을 거쳐 기계어 코드를 생성한다. 어셈블리어로 변환하는 과정은 컴파일러가 담당하고, 컴파일러를 통해 고급 언어로 작성한 코드를 최적화한 어셈블리어를 얻을 수 있다. 이렇게만 들으면 어셈블리어는 어차피 컴파일러가 만들어주니 배울 필요가 없다고 생각할 수 있지만, 어셈블리어를 읽을 수 있으면 컴파일러의 최적화 성능을 알 수 있고 하드웨어를 직접 제어해야 하거나 속도에 민감한 프로그램을 작성할 때 어셈블리어를 사용해야 한다. 그러니 컴파일러가 생성한 어셈블리어를 읽고 이해할 수 있는 정도를 목표로 어셈블리어를 공부하자. 어셈블리어는 기게어와 일대일로 대응되는 언어이고, 컴퓨터 구조에 따라 사용하는 기계어가 달라 기게어에 대응되..
[C++] OOP (3) Inheritance / 연산자 오버로딩
[C++] OOP (3) Inheritance / 연산자 오버로딩
2022.10.12C++ 은 Operation Overloading. 연산자 오버로딩을 지원한다. 출력과 입력 시 시프트 연산자와 함께 사용하는 cin과 cout도 연산자 오버로딩의 예시이다. 함수 오버로딩은 같은 이름의 함수를 정의하고 그 중 하나를 사용하는걸 말한다. 연산자 오버로딩도 본질은 다르지 않다. 연산자를 여러 개 정의하고 그 중 하나를 선택할 때 사용한다. 오버로딩이 불가능한 연산자도 있으니, 주의해서 사용하자. 연산자 오버로딩은 두 가지로 분류해서 사용한다. 1. 클래스 내부에서 연산자 오버로딩을 정의한다. 클래스 내부에서 정의할 경우 *this 가 사용된다. 즉, 오버로딩된 연산자의 선언부에서 첫 번째 인자는 user-defined type의 객체가 들어온다. this의 특성으로 해당 객체의 privat..
[PHP] PHP 정리 (1)
[PHP] PHP 정리 (1)
2022.10.11php는 script language. (js, python 처럼 컴파일 하지 않고 진행) php는 Server Side Script language. PHP : Hypertext Preprocessor // 재귀약자! .php 확장자 외국에서는 php를 많이 사용한다. 문법은 위와 같다. 대소문자를 구별하지 않는다. (변수는 구별함) 변수를 선언할 때도 자바스크립트처럼 타입을 따로 정의하지 않는다. ($color 처럼 $로 변수 선언) (Loosely Typed Language) . 이 연결 연산자 (concat) 주석은 # 혹은 // / * */ 모두 사용 가능 echo로 출력한다. 변수의 범위 1. local 2. global 3. static 함수 안에서는 global scope 변수에 접근할 수..
[컴퓨터 구조] 기본 컴퓨터 프로그래밍
[컴퓨터 구조] 기본 컴퓨터 프로그래밍
2022.10.09이제 설계한 컴퓨터가 제대로 작동하는지 증명해보자. 프로그램은 컴퓨터가 특정 업무를 처리하도록 작성된 명령어 또는 문장이고, 네 가지 종류가 있다. 1. 이진 코드 : 메모리상에 실제로 나타나는 형태의 명령어이다. 2. 8진 / 16진 코드 : 이진 코드로 작성 시 매우 많은 자릿수가 필요하기에 8진수 혹은 16진수를 사용해 자릿수를 감소시킨다. 3. 기호 코드 : 어셈블리 언어로, 각 명령어를 기호화된 이름으로 표현한다. 4. 고급 프로그래밍 언어 : C, Fortran 등.. 모든 컴퓨터는 각각의 어셈블리 언어를 가지고 있으며, 언어의 규칙은 컴퓨터 제조업체에서 정한다. 어셈블리 언어는 줄 단위로 해석된다. (Carriage-Return을 한 줄의 끝으로 간주한다) 이제 기본 컴퓨터의 어셈블리 언어를..
[JavaScript] 정리 (2)
[JavaScript] 정리 (2)
2022.10.09문자열 내부에서 \\로 \표현 let x = "a" let y = new String("a") x 는 string 타입, y는 object 타입. 단, x를 사용할 때는 자동으로 형변환돼서 x.length 사용 가능. string 메서드 1. slice : 자를 때 사용. 자바의 substring과 유사하지만, 파이썬처럼 인덱스에 음수를 넣을 수 있음 2. substring : slice와 비슷하지만, 인덱스에 음수를 넣을 수 없고 사용법이 좀 다름. (7,6) 이면 7부터 6글자를 자름 3. replace : 말 그대로 특정 부분을 대체. 첫 번째 요소만 대체함. 정규표현식 사용 가능. 4. trim : 공백제거. 파이썬의 strip과 비슷함 5. padStart : 길이를 지정하고, 부족한 부분을 특..
[백준] 14590 KUBC League (Small) - C++
[백준] 14590 KUBC League (Small) - C++
2022.10.06외판원 순회에서 한 단계 더 발전된 문제이다. dfs를 돌면서 dp 배열을 채운 뒤, 값들을 역추적해서 방문한 순서도 구해줘야 한다. dp[curNode][curState] : 현재 curNode를 탐색하고 있고, curState를 방문한 상태일 때 최대 길이 풀이의 편의를 위해 zero base index로 접근하고, 구해야 하는 선수가 1번이라고 했으니 0번으로 설정하고 dfs를 돌리자. #include #include using namespace std; int N; int arr[22][22]; int dp[21][1
[C++] C++과 Java
[C++] C++과 Java
2022.10.05같은 객체지향언어이고 문법도 비슷하지만, 언어를 깊게 이해하기 위해서는 두 언어의 차이점을 알아야 한다. 우선 C++이 자바보다 먼저 나왔고, 자바는 C++의 뒤를 잇는 완전한 객체지향을 지향하는 언어이다. 즉, C++은 자바만큼 객체지향을 완벽하게 지원하지는 않는다고 생각할 수 있다. 객체의 생성자를 정의할 때 C++은 initialization list와 몸통부 사용할 수 있지만 자바에서는 initialization list를 지원하지 않는다. 원래 C++은 initialization list를 사용해 변수를 초기화하고 생성자의 몸통부를 통해 별도의 작업을 수행하라는 의도로 이렇게 설계됐지만, 자바를 설계할 때는 두 가지 작업을 한 번에 처리하는게 합리적이라고 판단해 initialization lis..
[C++] Memory Allocation / static
[C++] Memory Allocation / static
2022.10.05C와 비슷한 양상을 보인다. 스택 메모리, 힙 메모리, static 메모리로 구분된다. 메모리는 선형으로 구성돼있고 컴파일러의 판단으로 특정 부분은 스택 메모리로 사용되고 또 어떤 부분은 힙 메모리, static 메모리로 정하고 사용한다. 스택 메모리의 제일 처음에는 메인 메서드가 올라간다. 이후 메인 메서드가 함수를 호출함에 따라 메인 메서드 위로 여러 메서드들이 쌓이게 되고, 각각의 메서드들이 종료될 때 마다 스택 메모리에 선언됐던 정보들이 날아가고 메인 메서드가 종료되면 프로그램이 종료된다. (스택에 올라간 메서드에서 if - else / for / while 문법을 사용하면 또 다시 스택을 만들어진 후 해당 지역변수들이 올라가고, 문장이 마무리되면 스택에서 pop 된다.) C에서의 malloc 혹..
[컴퓨터 구조] 기본 컴퓨터의 구조와 설계
[컴퓨터 구조] 기본 컴퓨터의 구조와 설계
2022.10.04컴퓨터의 구조는 레지스터 (하드웨어 리소스) / 명령어 집합 / 타이밍과 제어 도구들로 정의된다. 컴퓨터 명령어는 마이크로 연산을 기술한 이진 코드이고, 데이터와 함께 메모리에 저장된다. 제어 신호는 명령어를 메모리로부터 읽고 제어 레지스터에 가져다놓는다. (저장) 이후 제어 신호가 명령어를 해석해 제어 함수를 발생시켜 명령어를 실행한다. 명령어 코드는 컴퓨터가 특정 연산을 하도록 지시하는 비트 집합이다. 연산 코드 부분과 주소 부분으로 구성되고, 연산 코드는 연산을 지정하고 주소는 피연산자의 주소를 가리킨다. 메모리로부터 읽혀진 피연산자는 레지스터에 저장된 데이터와 연산을 수행한다. 여기서 연산과 마이크로 연산은 다르다. 연산 내부에 마이크로 연산을 수행하는 부분이 포함되어있다고 생각하자. 명령어 코드..
[JavaScript] DOM
[JavaScript] DOM
2022.10.03DOM : Document Object Model. 웹 페이지를 객체로 접근한다. 자바스크립트로 HTML DOM 요소에 접근해 값을 변경할 때 사용된다. 위의 계층 구조를 기억하자. 루트 - 엘리먼트 - 텍스트 / 노드들의 관계를 알아두자.+ attribute 텍스트 노드는 항상 자식이다. 크롤링 할 때 하던거처럼 DOM요소에 접근한다. nodeName / nodeValue / nodeType 잘 써먹기 appendChild 메서드로 텍스트와 태그를 붙일 수 있음 insertBefore 메서드로 부모의 특정 태그 앞에 태그를 붙일 수 있음 remove와 replace 사용해서 HTML조작 가능 nodelist는 인덱스로만 접근 가능, 배열은 id class값으로도 접근 가능 JS로 form validat..
[컴퓨터 구조] 레지스터와 마이크로 연산
[컴퓨터 구조] 레지스터와 마이크로 연산
2022.10.02레지스터에 저장된 데이터로 실행되는 동작을 마이크로 연산이라고 한다. 레지스터들의 종류를 간단하게 정리하자. MAR : Memory Address Register PC : Program Counter IR : Instruction Register R1 : Processor Register DR : Data Register 제어 명령은 위와 같은 형태로 주어진다. P는 0또는 1을 가지는 변수로 P가 1일 때 레지스터 R1의 값을 레지스터 R2로 전달하라는 의미이다. R2의 로드 입력은 제어 변수 P에 연결돼있고, 논리회로의 클럭과 동기되어 동작한다. t+1 에서 P값이 로드되고 t+1 이후 다음 상승 모서리에서 실제 전송이 발생한다. read와 write 모두 ← 연산으로 처리한다.(DR ← M[AR] ..
[컴퓨터 구조] 데이터의 표현
[컴퓨터 구조] 데이터의 표현
2022.10.02https://13months.tistory.com/477 컴퓨터가 이진수 체계를 사용하는 이유에 대해 살펴봤다. 컴퓨터가 사용하는 데이터의 표현 방식에 대해 간단히 알아보자. 숫자는 이진수로 표현하고, 문자나 기호는 7비트의 ASCII코드를 사용해서 표현한다. 뺄셈 연산과 논리 연산 시 보수 개념이 사용된다. 컴퓨터는 이진수 체계를 사용하니, 1의 보수와 2의 보수 중 하나를 선택해서 사용하면 된다. r진법에서 (r-1)의 보수는 (r^n - 1) - N 으로 정의된다. (n은 자릿수, N은 r진법의 수) r진법에서 r의 보수는 (r^n) - N 으로 정의된다. (n은 자릿수, N은 r진법의 수) 보수에 보수를 취하면 원래 수로 돌아온다. 이진수에서 MSB(제일 왼쪽 비트)를 부호 비트로 사용해 양수와..