하루의 쉼터

[C++] unsigned, signed 비교 주의 사항 본문

프로그래밍/C++

[C++] unsigned, signed 비교 주의 사항

Changun An 2023. 6. 1. 08:36
반응형

| unsigned, signed 비교 주의 사항

근래 백준 문제를 풀다 이해 안가는 상황을 마주하게 되어 확인해보았다.

	const int num = 5;
	int max =-1 ;
	std::vector<std::string> data;
	for (int i = 0; i < num; i++) {
		std::string temp;
		std::cin >> temp;
		data.push_back(temp);
		if (temp.size() > max) {
			max = temp.size(); 
		}
	}

이런식으로 문제를 풀고 있었는데, 아무리 봐도 if (temp.size() > max) 여긴 true가 나와야 됐는데

false로 떨어져서 왜그럴까 하고 확인해보았다.

 

결론부터보면 temp.size()는 unsigned int로 반환하기 때문에 int와 비교하게 되면 더큰 자료형인 unsigned int로 계산된다.

따라서 int는 -> unsigned int가 되며 음수 값을 집어 넣고 음수를 가질 수 없기 때문에 최대값(max) 4,294,967,295이 들어가게 된다. 

따라서 false가 나오므로 주의해야한다.

필자는 저 문제에서 static_cast를 사용하여 해결하였다.

if (static_cast<int>(temp.size()) > max) {
	max = temp.size(); 
}
반응형
Comments