«integer-overflow» 태그된 질문

정수 오버플로는 연산 결과가 기본 정수 유형으로 표현할 수있는 최대 값보다 클 때 발생합니다.

30
부호없는 정수 곱하기 오버플로를 어떻게 감지합니까?
На этот вопрос есть ответы на 스택 오버플로 на русском : Можно ли на языках C / C ++ определить целочисленное переполнение? 나는 a b = c 의 모든 솔루션을 찾기 위해 C ++로 프로그램을 작성 중이었습니다 . 여기서 a , b 및 c 는 모두 0-9를 정확히 한 번만 …
618 c++  c  integer-overflow 

4
C ++에서 (-2147483648> 0)이 true를 반환합니까?
-2147483648은 32 비트 정수 유형의 가장 작은 정수이지만 if(...)문장 에서 오버플로되는 것처럼 보입니다 . if (-2147483648 > 0) std::cout << "true"; else std::cout << "false"; 이것은 true내 테스트에서 인쇄 됩니다. 그러나 -2147483648을 정수로 캐스트하면 결과가 달라집니다. if (int(-2147483648) > 0) std::cout << "true"; else std::cout << "false"; 인쇄 false됩니다. 혼란 …


5
부호없는 정수 오버플로가 동작을 정의하지만 부호있는 정수 오버플로는 왜 그렇지 않습니까?
부호없는 정수 오버플로는 C 및 C ++ 표준에 의해 잘 정의됩니다. 예를 들어 C99 표준 ( §6.2.5/9) 상태 결과 부호없는 정수 유형으로 표현할 수없는 결과는 결과 유형으로 표현할 수있는 가장 큰 값보다 1이 큰 수의 모듈로 감소되기 때문에 부호없는 피연산자가 포함 된 계산은 절대로 흐르지 않습니다. 그러나 두 표준 모두 …


15
expr에서 오버플로를 피하는 방법 A * B-C * D
A*B - C*D유형이 다음과 같은 표현식을 계산해야합니다 signed long long int A, B, C, D; . A*B오버플로가 발생할 수 있지만 동시에 표현 A*B - C*D은 매우 작을 수 있습니다. 올바르게 계산하려면 어떻게해야합니까? 예 : MAX * MAX - (MAX - 1) * (MAX + 1) == 1, where MAX = …
161 c++  c  integer-overflow 


6
(A + B + C) ≠ (A + C + B) 및 컴파일러 재정렬
두 개의 32 비트 정수를 추가하면 정수 오버 플로우가 발생할 수 있습니다. uint64_t u64_z = u32_x + u32_y; 32 비트 정수 중 하나가 먼저 캐스트되거나 64 비트 정수에 추가되는 경우 이러한 오버플로를 피할 수 있습니다. uint64_t u64_z = u32_x + u64_a + u32_y; 그러나 컴파일러가 추가 순서를 변경하기로 결정한 경우 …

14
Java에서 두 숫자를 곱하면 오버플로가 발생하는지 어떻게 확인할 수 있습니까?
두 숫자를 곱하면 오버플로가 발생하는 특수한 경우를 처리하고 싶습니다. 코드는 다음과 같습니다. int a = 20; long b = 30; // if a or b are big enough, this result will silently overflow long c = a * b; 그것은 단순화 된 버전입니다. 실제 프로그램에서 a그리고 b런타임에 다른 곳에서 소싱됩니다. …

8
구현 정의 동작을 피하는 효율적인 unsigned-to-signed 캐스트
나는 그것을 취하는 함수를 정의하고 싶다. unsigned int인수로 인수에 int합동 모듈로 UINT_MAX + 1을 반환하는 . 첫 번째 시도는 다음과 같습니다. int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } 그러나 모든 언어 변호사가 알고 있듯이 INT_MAX보다 큰 값에 대해 unsigned에서 signed로 캐스팅하는 것은 구현에 따라 정의됩니다. 나는 이것을 구현하여 (a) 사양에서 …



3
부호있는 정수 오버플로가 C ++에서 여전히 정의되지 않은 동작입니까?
아시다시피 부호있는 정수 오버플로는 정의되지 않은 동작 입니다. 그러나 C ++ 11 cstdint문서 에는 흥미로운 것이 있습니다. 패딩 비트가없고 음수 값에 대해 2의 보수를 사용 하는 정확히 8, 16, 32 및 64 비트 너비의 부호있는 정수 유형 (구현이 유형을 직접 지원하는 경우에만 제공됨) 링크보기 그리고 여기 제 질문은 : 표준가 …

12
C / C ++에서 서명 된 오버플로 감지
언뜻보기 에이 질문은 정수 오버플로를 감지하는 방법 의 중복처럼 보일 수 있습니다 . 그러나 실제로는 상당히 다릅니다. 부호없는 정수 오버플로를 감지하는 것은 매우 사소한 일이지만 C / C ++에서 서명 된 오버플로를 감지하는 것은 실제로 대부분의 사람들이 생각하는 것보다 더 어렵다는 것을 발견했습니다. 가장 분명하지만 순진한 방법은 다음과 같습니다. int …

5
Java Integer compareTo ()-왜 비교 대 빼기를 사용합니까?
나는 것으로 나타났습니다 java.lang.Integer구현 compareTo메서드는 다음과 같이 외모를 : public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteger.value; return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1)); } 문제는 빼기 대신 비교를 사용하는 이유입니다. return thisVal - anotherVal;

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.