Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ros
- 리눅스
- 오늘도 우라라 공략
- Subscribe
- 환경설정
- mysql
- install opencv-4.4.0 on ubuntu 22.04
- 반복문
- LeetCode
- ubuntu
- 데이터 베이스
- 마리아 DB
- C언어
- publish
- 프로그래밍
- 기초
- mariaDB
- 우분투
- 토픽
- MSG
- 오늘도 우라라
- 그랑사가
- Linux
- 등차수열
- 오늘도 우라라 펫 공략
- topic
- C++
- JungOl
- while
- 오늘도 우라라 펫
Archives
- Today
- Total
하루의 쉼터
[C++] unsigned, signed 비교 주의 사항 본문
반응형
| 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();
}
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++11] std::unique_ptr에 대해서 (0) | 2023.05.02 |
---|---|
[C++11] std::is_same (0) | 2023.04.27 |
[UtilitiesLibrary] std::size_t - with unsigned int (0) | 2023.04.27 |
[BasicGrammar] Inline Function (0) | 2023.04.18 |
[BasicGrammar] FunctionPointer(함수포인터) - with. c++ (0) | 2023.04.16 |
Comments