C와 C++ 프로그래밍을 하다 보면 모든 비트를 1로 설정하기 위해 다양한 방법이 사용된다.
unsigned int flags = -1; |
unsigned int flags = ~0; |
unsigned int flags = 0xFFFFFFFF; |
위의 방법이 어떻게 동작하는지, 가장 이식성 있는 방식은 무엇일까.
unsigned int flags = -1;
이 방법은 음수 값을 unsigned 타입에 할당하는 형태이다. C 표준에서는 signed 값을 unsigned로 변환할 때 모듈로 연산을 수행한다. 플랫폼마다 unsigned int의 크기가 달라도 항상 최댓값으로 설정되므로 이식성이 뛰어나다.
unsigned int flags = ~0;
~0은 비트 NOT 연산을 통해 0의 비트를 반전시켜 모든 비트를 1로 만든다. 대부분의 시스템이 2의 보수 방식을 사용하므로 이 방법도 동작하지만, 일부 시스템에서는 다른 결과를 초래할 수 있다.
unsigned int flags = 0xFFFFFFFF;
이 방법은 32비트 시스템에서는 모든 비트를 1로 설정하지만, unsigned int가 16비트나 64비트인 경우 문제가 발생할 수 있다.
우리는 이식성과 정확성 때문에 이러한 고민을 한다. 플랫폼마다 int나 unsigned int의 크기가 드를 수 있고, 대부분의 시스템은 2의 보수를 사용하지만, 일부 시스템에서 다른 방식을 사용하여 예상치 못한 결과를 초래할 수 있다.
가장 이식성 높은 방법으로 평가받는 방법은 unsigned int flags = -1;이다. 작은 코드 하나에도 유지보수성과 안정성에 큰 영향을 미칠 수 있으니, 항상 이식성을 고려하여 작성하는 것이 중요하다.
728x90
'C언어' 카테고리의 다른 글
[C언어] extern란? (0) | 2024.10.28 |
---|---|
[C언어] 세미콜론(;)을 사용하는 이유 (0) | 2024.10.23 |
[C언어] 주석이란? (0) | 2024.10.22 |
[C언어] 단락 평가 (0) | 2024.10.22 |
[C언어] gets()의 결함 (0) | 2024.10.21 |