2010-11-23 4 views
0

특정 데이터 형식 (int, long)의 최대 값을 초과하는 값을 나타내는 방법은 무엇입니까?최대 값보다 큰 숫자를 나타내는 방법

다른 저장 공간을 카운터처럼 사용하는 방법을 생각 중입니다. 최대 값을 초과하면 카운터가 업데이트되어 변수가 "x"횟수 제한을 초과했습니다. 그것을하는 다른 효과적인 방법이 있습니까?

어떻게 정확한 값을 표시합니까?

추신 : 그냥 가설적인 질문입니다.

답변

2

한 가지 방법은 실제로 이러한 목적으로 값 중 하나를 조각하는 것입니다.

예를 들어 0에서 65535까지의 값을 나타낼 수있는 16 비트 정수형이있는 경우 범위를 0에서 65534로 줄이고 65535를 사용하여 "너무 큰"값을 나타냅니다.

정상적인 이벤트 진행 과정에서 해당 값을 생성하지 않도록 조심해야하지만 언어가 클래스 기능을 제공하는 경우 상당히 쉽습니다.

또는, long에 대한 int 또는 long long의 다음 큰 데이터 유형과 같은 long를 사용하여 정보를 저장하는 여분의 범위를 사용할 수 있습니다.

그리고 그 이상이 필요한 경우 숫자에 인위적인 제한이 없도록 bignum 라이브러리를 코딩 (또는 이미있는 라이브러리 사용) 할 수 있습니다.

1

는 표준 IEEE-754 부동 소수점하고 "무한대"비트 패턴을 고려 : 사실, 일부 언어이 자신의 구현을 가지고있다. 고정 된 int/long 내부에서 유사한 비트 패턴을 "무한"을 의미하도록 예약 할 수 있습니다. 그러나 CPU는 대부분의 FPU처럼 수학/오버플로 상태에서 도움을주지 않습니다.

Ruby 또는 elisp와 같은 일부 언어는 이미 정수로 비트를 "예약"합니다 (예 : Ruby의 fixnum은 객체 관리에 2 비트가 사용되므로 [-2^29,2^29-1]로 제한됩니다). 특정 비트 패턴 대 비트를 사용하면 하나의 잠재적 인 값만 제거됩니다.

당신은 높은 수준의 언어, 말, C 번호에 대해 이야기하는 경우, 다음은 사용자 정의 유형을 정의하는 것은 쉽다 :

struct IntWithStuff { 
    int value; 
    bool isTooBig; 
} 

또한 다양한 연산자를 오버로드 할 수 및 캐스트 일부 (명시 적)를 구현하지만, 나는 빗나간다.