C언어에서 정수는 어떻게 표현이 될까요? 결론부터 말하자면, 2의 보수 표현법으로 표시합니다. 그러면 이 표기법이 무엇일까요? 4bit로만 표현되는 정수 데이터가 있다고 해 봅시다. 부호가 있는 정수인 경우, 최상위 비트는 보통 부호를 표시합니다. 이 때 signed bit가 1이면 음수를, 아니라면 양수를 나타냅니다. 만약에 부호 없는 정수형이라면, 4bit를 다 쓰겠지요. 4개의 비트로 표현할 수 있는 상태값은 16개입니다. 수로 따지면 0부터 2^4-1까지입니다. 그런데 하나의 비트를 부호를 위해서 썼으니, 일단 양수에 대해서, 0, 1, 2, 3, 4, 5, 6, 7까지면 표현이 가능하겠군요. 이것들은 각각 2진수로 0부터 7까지를 나타냅니다. 음수일 때가 문제인데요. 이것을 어떻게 표현하면 좋을..
C언어 검색 결과
c언어에서 time(NULL) 함수로, 1970년 1월 1일부터 현재까지 경과된 초를 리턴한다고 했었습니다. 이 값만 끌어와서 뭔가 의미있는 데이터로 가공하고 싶은데, 어떻게 하면 좋을까요? 현재까지 경과된 초를 넘겨주면, 데이터를 잘 가공해서, struct tm *형을 리턴해 주는 함수가 있는데요. 이것이 localtime 함수입니다. struct tm *localtime(time *cur_t); 그러면, struct tm형은 어떠한 필드들로 이루어져 있을까요? 예제에서 다루는 중요한 필드만 몇 개 봅시다. tm_sec, tm_min, tm_hour는 각각 시, 분, 초를 의미합니다. 그리고, tm_mday, tm_mon, tm_year가 있는데요. 이것은, 각각 몇 일, 몇 월, 몇 년임을 의미합니다..
c++이나 java에는 부분 문자열을 가지고 오는 함수가 있습니다. 각각 substr과, substring이에요. 예를 들어, 어떠한 문자열 str = "chogahui"가 있고, 1번째부터 3번째까지 가지고 온 부분 문자열 sub = "hog"일 거에요. 이걸 가지고 오는 함수를 string.h에서는 찾기가 힘듭니다. 그러면 이것을 어떻게 구현해야 할지, 생각해 봅시다. 사실 핵심적인 것은 간단합니다. 어떠한 시작 위치에서부터 t개 만큼을 어딘가로 복사한다. 만약에 문자열 str에서 [s,e)까지의 부분 문자열을 복사한다면 e-s개를 어딘가로 복사를 하는 것입니다. 그러면, 문자열을 복사를 하는데, 시작 위치로부터 t개만큼 copy 하는 함수를 찾으면 되는데요. 그것이 strncpy 함수입니다. cha..
문자열 안에서 pat 이라는 문자열이 있는지 찾는 함수는 strstr이였습니다. wandbox에서는 생각보다 빠르게 그 함수가 동작하는데, 그 이유는 언젠가 한 번 문자열 알고리즘을 하면서 뜯어 본다고 했었어요. 사실 벌써부터 쉽지 않을 거 같은 예감이 드네요. 오늘은 문자열 안에 어떠한 문자가 있는지를 판단하는 함수를 배워볼 건데요. 그 함수는 strchr입니다. 원형을 봅시다. char *strchr(const char *str,int ch); char형 포인터를 리턴합니다. str이라는 문자 열에서, ch가 나타나는 최초의 위치를 리턴합니다. 만약에 나타나지 않는다면 NULL 값을 리턴해요. 어렵지 않아요. 예를 들어 문자열 str이 "chogahui05"가 있었다고 해 봅시다. 그러면 여기서, '..
strstr의 세부 구현은, 문자열 알고리즘을 하면서 차차 알아가도록 합시다. C언어에서, 어떤 문자열에서 특정한 문자열이 있는지 (패턴), 간단하게 찾기 위해서 strstr를 이용하면 좋습니다. 이 친구는 다음과 같이 씁니다. char *strstr(const char *str,const char *pat); str 안에 pat이 있는지 찾습니다. 만약에 있다면, 찾은 최초의 위치를 리턴합니다. 그렇지 않다면 NULL을 리턴합니다. 예를 들어서 설명해 보겠습니다. 저는 "chogahuigatrainlike"에서 "ga"를 찾으려고 합니다. 그러면 strstr은 어떤 것을 리턴할까요? char형 포인터를 리턴하니까, char형이 저장되어 있는 공간을 가리키는, 주솟값을 리턴할 건데요. str이 이런 식으..
최근댓글