반응형
문자 하나를 입력받았을 때 그 문자를 대문자로 변경하는 함수와, 소문자로 변경하는 함수를 구현하는 방법은 ascii code를 이용하면 된다.
쉽게 사용할 수 있는 방법은 대문자와 소문자의 ascii code의 차이가 32만큼 난다는 사실을 이용한다는 것이다.
즉 대문자인 경우에는 32를 더해주면 소문자로 바꿀 수 있고, 소문자인 경우에는 32를 빼주면 대문자로 바꿀 수 있다.
이것을 C++ 문법으로 표현하면 아래와 같다.
char to_lower(char ch){ if(ch >= 'A' && ch <= 'Z') return ch + 32; else return ch; } char to_upper(char ch){ if(ch >= 'a' && ch <= 'z') return ch - 32; else return ch; }
이번에는 BIT MASK를 이용해서 표현하는 방법을 살펴보도록 하겠다. 대문자와 소문자를 각각 8bit 이진수로 표현을 하면 앞에서 세 번째 비트를 제외한 나머지 비트는 모두 같다는 것을 알 수 있다. 그렇기 때문에 이 사실을 이용해서 대소문자를 변경할 수 있다.
char to_lower(char ch){ if(ch >= 'A' && ch <= 'Z') return ch | 0x20; else return ch; } char to_upper(char ch){ if(ch >= 'a' && ch <= 'z') return ch & 0xdf; else return ch; }
BIT MASK를 사용한 경우 약간 코드를 이해하기는 어려워졌지만, 그래도 속도 상으로는 매우 약간 이득을 볼 수 있다.(물론 컴파일러가 좋다면 위의 코드도 어셈블리로 변환할 때 BIT 연산자로 변경해서 사용을 하겠지...)
반응형
'컴퓨터 > C++' 카테고리의 다른 글
complex class 구현 (0) | 2016.04.27 |
---|---|
Merge Sort 구현 (0) | 2016.04.17 |
*없이 두 정수 곱하기 (0) | 2016.04.13 |
Stack 기반 미로 찾기(DFS) (0) | 2015.10.27 |
Stack을 이용한 간단한 계산기 (0) | 2015.10.17 |