C에서 다음 코드 조각은 예상치 못한 출력 "Greater":
#include <iostream> #include <vector> int main() { std::vector<int> a; std::cout << "vector size " << a.size() << std::endl; int b = -1; if (b < a.size()) std::cout << "Less"; else std::cout << "Greater"; }
출력:
vector size 0 Greater
이 반직관적인 동작의 이유는 비교되는 값 간의 유형 차이에 있습니다. a.size()는 벡터의 음수가 아닌 크기를 나타내는 부호 없는 정수를 반환합니다. 반면에 b는 부호 있는 정수이며 음수 값 -1을 보유합니다.
이 두 값을 비교할 때 C는 암시적으로 부호 없는 승격을 수행합니다. 결과적으로 b는 부호 없는 큰 정수로 승격된 다음 부호 없는 a.size()와 비교됩니다. 부호 없는 큰 값이 0을 초과하면 "더 큰" 출력이 발생합니다.
이 동작은 다음 코드로 더 자세히 설명할 수 있습니다.
#include <iostream> int main() { unsigned int a = 0; int b = -1; std::cout << std::boolalpha << (b < a) << "\n"; }
출력:
false
여기서는 부호 없는 유형(a)과 부호 있는 유형을 직접 비교합니다. (b). 음수 값 b는 부호 없는 큰 정수로 승격되며, 이는 값이 0인 부호 없는 a보다 큰 것으로 정당하게 간주됩니다.
유형 차이와 암시적 승격 규칙을 이해하는 것은 C에서 부호 있는 값과 부호 없는 값으로 작업하는 데 중요합니다. 다양한 유형의 정수를 비교할 때 승격되는 방식과 결과 비교가 의미가 있는지 여부를 고려하는 것이 중요합니다.
위 내용은 -1을 빈 벡터의 크기와 비교하면 C에서 '더 큰' 결과가 나오는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!