C, C++

    [C] C언어에서 음수를 표현하는 방법

    1. -10은 메모리 비트에 어떻게 저장될까? 먼저, 10진수 10을 저장하려면 2진수 1010으로 변경한 다음 비트에 저장된다고 알고 있다. 그런데 음수는 어떻게 표현해야 할까? 2. 양수와 음수를 구분하기 위한 부호와 절대치 법칙 다른 말로 MSB(Most Significant Bit) 방법이라고도 하는데, 이는 최상위 비트를 사용하여 숫자가 양수인지 음수인지를 구분하는 방법이다. 1 0 0 0 1 0 1 0 최상위비트 MSB가 1이므로 음수 0 0 0 0 1 0 1 0 최상위비트 MSB가 0이므로 양수 비트 연산자 ~는 '1의 보수'이다. 1의 보수는 2진수로 된 숫자의 비트를 모두 반전시키는 것이다. 예를 들어 ~(1010)은 (0101)이 된다. 다시 말해 (1010)의 1의 보수 값은 (010..

    컴파일(Compile) 과정

    전처리(Precompile) 컴파일의 전체 과정은 네 단계로 나누어볼 수 있습니다. 그 중 첫 번째 단계는 전처리인데, 전처리기에 의해 수행됩니다. # 으로 시작되는 C 소스 코드는 전처리기에게 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려줍니다. 예를 들어, #include는 전처리기에게 다른 파일의 내용을 포함시키라고 알려줍니다. 프로그램의 소스 코드에 #include 와 같은 줄을 포함하면, 전처리기는 새로운 파일을 생성하는데 이 파일은 여전히 C 소스 코드 형태이며 stdio.h 파일의 내용이 #include 부분에 포함됩니다. 컴파일(Compile) 전처리기가 전처리한 소스 코드를 생성하고 나면 그 다음 단계는 컴파일입니다. 컴파일러라고 불리는 프로그램은 C 코드를 어셈블리어라는 저..

    [C] 모두의 C언어 복습&정리 (2)

    1. 변수의 저장 범위 int는 정수를 저장하는 데 필요한 메모리 공간을 4바이트 사용한다. 컴퓨터는 모든 정보를 0과 1, 즉 2진수로 처리한다. 이때 0 또는 1을 저장할 수 있는 메모리 공간을 비트(bit)라고 한다. 비트는 컴퓨터가 정보를 저장하는 최소 공간으로, 8개의 비트가 모인 공간을 바이트(byte)라고 한다. 그러므로 4바이트는 32비트와 같다. 1비트로 표현 가능한 숫자는 0과 1 두 개 뿐이다. 2비트로 표현 가능한 숫자는 2진수 00, 01, 10, 11, 즉 10진수로 0, 1, 2, 3을 표현하고 저장할 수 있다. 그러므로 n비트로 저장 가능한 숫자의 범위는 0 ~ 2ⁿ(n은 비트의 개수) - 1까지 이다. 4바이트는 32비트이므로 양의 정수로만 표현할 수 있는 숫자는 4,294..

    [C] 모두의 C언어 복습&정리 (1)

    C언어를 처음 배울 때 봤던 책이다. 그동안 까먹은 것도 있어서 오랜만에 다시 이 책을 보면서 C에 대해서 정리하려고한다. 아래 사이트에서 책의 내용을 볼 수 있다. https://thebook.io/006989/ 더북(TheBook): 모두의 C 언어 thebook.io 1. C언어의 유래 C언어는 1972년 벨(Bell)연구소의 연구원 데니스 리치(Dennis Ritchie)에 의해서 개발되었다. 왜 이름이 C언어일까? 사실 큰 의미는 없다. 벨 연구소에서 처음 진행한 프로젝트 이름이 A 프로젝트, 그 다음에 진행한 프로젝트 이름이 B 프로젝트, 그 이후에 C 프로젝트가 수행되었다. 그러다가 C 프로젝트에서 유닉스를 개발하는 과정 중에, 부산물로 컴퓨터 언어가 데니스 리치 연구원에 의해 만들어졌고, ..

    [C/C++] #include 시에 < > , " " 의 차이점

    옛날에 찾아봤었는데 기억이 안나서 다시 찾아봤다. 자세한 내용은 C standard, 6.10.2 섹션에 2 ~ 4까지에 나와있다. [1] #include 는 컴파일러가 미리 정해놓은 위치 A에서 헤더를 찾는다. (파일이 아닐 수 있다.) [2] #include " "는 컴파일러가 미리 정해놓은 위치 B에서 파일을 찾는다. 만약 파일을 찾지 못하면, " "를 로 바꿔 [1]을 진행한다. ( [2]가 [1]보다 범위가 넓다. ) A는 보통 /usr/include/ 같은 위치이고 B는 소스파일이 있는 위치이다. 위와 같은 이유로 https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html 에 따르면 #include 는 시스템 헤더를 include 하는 데..

    [C++] 스마트 포인터 참고할만한 글

    스마트 포인터에 대해 공부하면서 참고했던 글이다. 스마트 포인터 개념에 대해 궁금한 경우 : http://www.tcpschool.com/cpp/cpp_template_smartPointer 코딩교육 티씨피스쿨 4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등 tcpschool.com 좀 더 심화적인 개념을 알고싶은 경우 : https://object-world.tistory.com/8 1. std::unique_ptr C++ 메모리 관리 C++에서 생 포인터(raw pointer)를 관리하기는 쉽지 않다. 자바는 가비지 콜렉터가 이를 수행하지만 C++같은 경우 사용자가 직접 메모리를 관리해야 한다. 잘못된 메모리 관리는 메모 object-world.tistory..