Programming/C++ STL2013.02.04 23:31
원인은 대충 알고 있지만 해결책을 찾다 안되서 고민고민 -_-
아무튼 실험을 해보면, unsigned char 형에서 int로 암시적으로 형변환을 하면
결과쪽으로 형변환을 한것과 같아서 unsigned 형일 경우 의도하지 않은 형태로 값이 변형이 될 수 있다.

결론만 말하자면, unsigned 를 더 큰 크기의 signed로 저장할때 부호를 제대로 살리기 위해서는
작은 크기의 signed 형으로 변환하고(여기서는 unsigned char를 char 로) 넣어 주어야 한다 라는 점.

#include "stdio.h"

void main()
{
	unsigned char t1 = -1;
	char t2 = -1;
	int t3;

	t3 = t1;
	printf("%d\n",t3);

	t3 = (int)t1;
	printf("%d\n",t3);

	t3 = (char)t1;
	printf("%d\n",t3);

	t3 = t2;
	printf("%d\n",t3);

}

$ ./a.out
255
255
-1
-1 



---
원리적으로야
-1은 0x0FF에서 0x0000 00FF 으로 int로 확장시 앞에 채워지는 식으로 늘어 나는 바람에
의도한 값인 0xFFFF FFFF 가 되지 않아 부호가 상실하게 된다.

'Programming > C++ STL' 카테고리의 다른 글

참조에 의한 전달(pass by reference)  (0) 2013.02.09
C++ 첫걸음 *-_-*  (0) 2013.02.09
unsigned char -> int 변환 주의사항  (0) 2013.02.04
템플릿 메타프로그래밍  (0) 2013.01.06
c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
Posted by 구차니

댓글을 달아 주세요