c/c++ 에서 unsigned 변수를 사용할 땐 주의해야 합니다.

수식에서 signed 변수와 unsigned 변수를 섞어 사용하면 타입 변환이 일어납니다.

타입 변환 규칙을 분명히 알고 사용해야 합니다.

(어렵지는 않습니다. 다른 타입을 가지는 변수들의 연산 결과는 더 넓은 표현 범위의 타입을 가집니다.

고로 signed int 와 unsigned int 의 연산 결과는 unsigned int 입니다.

결과는,

4294967295

4294967295

-1 

입니다.


또한 unsigned 변수를 뺄셈에 사용하면 역시 버그가 발생할 가능성이 생깁니다.

결과가 음수가 나오면 overflow 가 발생하여 예상치 못한 결과가 발생할 수 있습니다.

논리적으로 음수가 절대 발생하지 않는 경우 unsigned 변수를 사용하는 것은 장점이 됩니다.

변수가 0 보다 작은 지를 체크하지 않아도 되기 때문이죠. 예를 들면


대략 이런 식입니다.
array 의 boundary 체크가 빠졌다고 ? 물론 두 가지 함수에 모두 존재해야하므로 생략했습니다.


하지만 좋은 방법은 아니지만, 의도한 경우 이렇게 사용할 수는 있습니다.


약간의 장점이 있지만, 조심해서 사용해야합니다.

제 생각엔 몇 가지 경우를 제외하면 가능한 unsigned 변수를 사용할 필요가 없다고 생각합니다.

대략 count, size 를 표현해야 하는 경우에만 사용하면 되지 않을까 생각합니다.

java 에는 unsigned 변수 타입이 없습니다. (굳이 따지면 char 는 unsigned 타입이긴 합니다만)

왜냐하면 약간의 장점에 비해 복잡하기 때문입니다.

: