본문 바로가기

전체 글

(8)
형변환에 대하여 1. 형변환은 왜 일어날까 ? 상식적으로 우리는 2 + 1.625 = 3.625 라고 생각합니다. 그러나 0 과 1 밖에 모르는 컴퓨터 입장에서는 둘을 그냥 더한다면 예상치 못한 값이 나오게 됩니다. 보통 정수를 int 에 저장한다면 2 의보수법 , 실수를 float 에 저장한다면 IEEE 754 표준의 부동소수점 변환을 이용합니다. 둘을 더한다면 11 이 나오게 됩니다. 우리의 상식과 생각보다 많이 멍청한 컴퓨터를 연결할 필요가 있는데 그 작업을 컴파일러 라는 프로그램이 형변환으로 담당해줍니다. 컴퓨터 입장에서는 자기가 멍청하다는 것을 들키지 않기 위해 형이 같은 경우만 연산합니다. 보통 형변환은 우리가 모르게 컴파일러가 암묵적으로 해주기 때문에 어떤 경우에 형변환이 일어나는 지 파악하는 것은 중요합니..
자료형에 대하여 저는 자료형에 대한 이해가 다른 C 문법을 배울때나 예제 코드를 분석할 때 큰 도움이 되었습니다. 오늘은 지금까지 제가 이해한 자료형에 대하여 정리해 보겠습니다. 1. 자료형이란 무엇일까 ? 책에는 다음과 같이 적혀 있습니다. 결국 컴퓨터는 0 혹은 1 이라는 말 들어 보셨나요 ? 현실 세계에 존재하는 어떠한 데이터든 컴퓨터에서 다룰려면 0 혹은 1 로 표현할 수 있어야 합니다. 이런 데이터들을 저장할 때 정수인지 문자인지 구분 없이 저장한다면 , 나중에 0 , 1 모음을 컴퓨터가 어떤 데이터 인지 판별할 때 까다롭게 느낄 것입니다. 따라서 자료형을 제시하여 컴퓨터가 0 ,1 모음을 표현하고 판단하는 기준이 되게 하였습니다. 그렇다면 자료형을 통해 우리는 어떤 내용을 알 수 있을까요 ? 위의 책 내용에서..
C 에서 i = ++i 나 a[i++] = i 를 쓰면 안되는 이유 표현식 i = ++i 나 a[i++] = i 를 쓰게될 경우 이는 C 표준에서 undefined behavior 입니다. 이식성 있는 코드를 작성하고 싶다면 위와 같은 표현식은 피하는게 좋습니다. 그렇다면 왜 undefined behavior 일까요 ? 이를 위해 side effect , sequence point 라는 개념에 대해 먼저 알아 봅시다. 1. side effect 우리는 보통 연산자가 피연산자의 값을 바꿀 것이라고 기대하지는 않습니다. 가장 평범한 연산자인 산술연산자의 경우 피연산자 i , j 에 대해 특정 연산을 하지 i , j 값 자체를 바꾸지는 않습니다. #include int main(void){ int i = 1 , j = 1 ; i + j ; i - j ; i * j ; i / ..