> 백엔드 개발 > C++ > C에서 부호 있는 정수와 부호 없는 정수를 비교할 때 -1이 0보다 큰 것으로 비교되는 이유는 무엇입니까?

C에서 부호 있는 정수와 부호 없는 정수를 비교할 때 -1이 0보다 큰 것으로 비교되는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-11 02:04:14
원래의
840명이 탐색했습니다.

Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C  ?

부호 없는 정수와 음의 부호 있는 정수 비교 이해

제공된 C 프로그램에서 b를 비교할 때 "Greater"라는 출력이 관찰되는 것은 당황스럽습니다. (-1) -1이 산술적으로 다음보다 작음에도 불구하고 a.size() (0) 사용 0. 이 예상치 못한 동작은 부호 있는 정수 유형과 부호 없는 정수 유형 간의 근본적인 차이로 인해 발생합니다.

이 경우 a.size()는 벡터의 크기를 나타내는 부호 없는 정수를 반환합니다. 대조적으로, b는 부호 있는 정수입니다. 이 두 값을 비교할 때 부호 있는 b는 자동으로 부호 없는 유형으로 승격됩니다. 이 프로모션은 -1을 0을 초과하는 부호 없는 큰 값으로 변환합니다.

이 동작은 벡터 크기에만 국한되지 않습니다. 다음 코드 조각은 동일한 문제를 보여줍니다.

#include <iostream>
int main()
{
  std::cout << std::boolalpha;
  unsigned int a = 0;
  int b = -1;
  std::cout << (b < a) << "\n"; 
}
로그인 후 복사

이 코드를 실행하면 "false"가 출력됩니다. 이는 부호 없는 유형의 컨텍스트에서 -1이 0보다 큰 것으로 간주됨을 나타냅니다.

이러한 혼란을 피하려면 부호 있는 정수와 부호 없는 정수의 동작이 서로 다르므로 의도한 작업을 신중하게 고려하지 않고 혼합해서는 안 된다는 점을 기억하는 것이 중요합니다.

위 내용은 C에서 부호 있는 정수와 부호 없는 정수를 비교할 때 -1이 0보다 큰 것으로 비교되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿