예를 들어 if (-1> 2)라고 할 때. 부호가있는 값 (-1)이 부호가없는 값으로 변환되기 때문에이 조건은 참입니다. 그러나 내가 알고 싶은 것은 그것을 어떻게 개조 하는가? 가치가 바뀌면 무엇이 될 것입니까?부호있는 번호와 부호없는 번호 비교
답변
예를 들어 (-1> 2)라고 할 때. 부호있는 값 (-1)이 부호없는 값으로 변환 되었기 때문에이 조건이 적용됩니다.
아니요.
모두 정수 상수, 타입 int
(즉 signed int
)가 (피연산자의 부호를 변경하는, 이전의 피연산자로 단항 연산자를 작용이 맥락에서 -
로, 상수 표현식입니다 @ KeithThompson의 의견에서 지적했듯이, 정확합니다) 따라서 @amdn은 변환 할 것이 없다는 것을 지적 했으므로 (피연산자 유형은 단순히 동일하므로) if
의 결과는 0
(또는 false)입니다.
아마 당신은 다른 이야기의 종류 인 -1 > 2U
을 의미했을 것입니다. 보통 산술 변환 규칙 (대괄호로 정수 프로모션이라고 함) 때문에 int
의 피연산자는 (또는 단순히 수학적 의미에서 2)보다 클 수있는 큰 숫자를 산출하여 unsigned
유형으로 승격됩니다. 더 구체적으로는 unsigned
과 int
유형 모두 동일한 순위이지만 이러한 조건으로 인해 서명 된 대응 항목 (즉, 피연산자)은 서명되지 않은 상태로 승격됩니다.
@mafso : 귀중한 의견에 감사드립니다! –
예, 정수 상수 '1'과 '2'는 모두 'int'유형입니다. 그러나'-1'은 정수 상수가 아닙니다; 단항'-' 연산자가 적용된 상수'1'과'int' 유형의 상수 표현식입니다. –
- 1. 부호있는 번호와 부호없는 번호의 비교
- 2. 부호있는 번호와 부호없는 번호의 해석
- 3. 프로세서가 부호없는 번호와 부호있는 번호를 알게되는 이유는 무엇입니까?
- 4. C++ 부호있는/부호없는 불일치
- 5. C89 : 부호있는/부호없는 불일치
- 6. 부호있는 및 부호없는 정수?
- 7. 코드의 자격 - libc의 qsort에있는 부호있는 값과 부호없는 값의 비교
- 8. C++ : 부호있는 정수 표현과 부호없는 정수 표현의 비교
- 9. C++ NOW : 부호있는 정수식과 부호없는 정수식 비교 (Freebsd, GCC, Gmake)
- 10. 부호없는 및 부호있는 정수로 번호 매기기 시스템 설계
- 11. C++ : 부호없는 형식 만 사용하는 경우 부호있는/부호없는 불일치
- 12. C - 부호있는 및 부호없는 정수
- 13. Ruby의 부호있는 및 부호없는 정수
- 14. 포인터 산술 & 부호있는/부호없는 변환!
- 15. MIPS에서 부호있는 덧셈, 부호없는 덧셈, 부호있는 빼기와 부호없는 빼기의 차이점은 무엇입니까?
- 16. 부호있는 부호없는 부호로 또는 부호 부호로 변환하기
- 17. 부호없는 변수의 차이점을 부호있는 변수에 저장
- 18. 부호있는 대 부호없는 int를 올바르게 비교하는 방법
- 19. 어셈블리 언어의 부호있는 및 부호없는 규칙
- 20. 부호있는 음수가 부호없는 숫자로 변환되는 이유는 무엇입니까?
- 21. vs2015 경고 C4018 : '<=': 부호있는/부호없는 불일치
- 22. 부호있는 값과 부호없는 값의 비교를 올바르게 처리하기
- 23. AVX를 사용하는 부호있는/부호없는 정수의 최소 수
- 24. 배열 인덱스 유형 : 부호있는/부호없는 정수 배열
- 25. 부호없는 정수를 부호있는 것으로 해석하는 중
- 26. 부호있는/부호없는 불일치가있을 때 발생하는 캐스트는 무엇입니까?
- 27. 경고 C4018 : '>': 부호있는/부호없는 불일치
- 28. 리눅스 메이저 번호와 마이너 번호
- 29. 행 번호와 고유 번호 합치기
- 30. 2의 보수/부호없는 오버플로 비교
기계에 따라 다르지만 거의 모든 현대적인 것들은 [2의 보수]를 사용합니다. (http://en.wikipedia.org/wiki/Two's_complement) – Kevin
컴파일러가 -1> 2라고하면 – amdn
@ Kevin Ok. 2의 보수로 (11111111) 인 (-1)을 변환하면 (1) 10 진수의 (00000001)이됩니다. 그러면 조건은 (1> 2)가되며 거짓이어야합니다. 그러나 프로그램에서이를 시도 할 때 그것이 사실임을 보여줍니다. 왜? – user3417785