2012-02-21 1 views
3

는 :long 타입의 데이터가 int의 범위 내에 있는지 확인하는 이식성있는 방법은 무엇입니까? 예를 들어

long xx = ..; //is xx in range of an int type? 

나는 내 마음이 질문에 승/와서, 그래서 당신의 일부를 요청할 수 있습니다로는 정말 면접 질문이 아니다.

기본적으로 <climits>을 사용하여 코드를 확인하려면 코드 예 : INT_MIN, INT_MAX을 사용하여 코드를 작성하고 싶습니다. 불가능하지는 않더라도, 이식성 있고, 가장 효과적인 방법은 무엇입니까?

이식성이란 구현 정의 또는 플랫폼에 종속적이어서는 안된다는 뜻입니다. 예를 들어 바이트가 항상 8 비트가 아닌 경우가 있습니다.

+2

겠습니까는'를 sizeof (int)를 ==는 sizeof (긴)'작품을 비교? – dasblinkenlight

+0

평등하지 않은 경우 어떻게해야합니까? –

+0

그러면 범위가 동일하지 않습니다. – dasblinkenlight

답변

1
#include <limits> 

long xx = 5432; 

if(long(numeric_limits<int>::max()) > xx) 
{ 
    int x = static_cast<int>(xx); 
    //... 
1

왜곡되지 않는 이유는 무엇입니까?

long v = 1; 
bool in_range = (int)v == v; 
+1

IIRC, 범위를 벗어나는 부호있는 정수형 캐스트는 구현 정의 동작입니다. 나는 여전히 이것을위한 소스를 찾기 위해 노력하고 있습니다 ... – Mysticial

+2

'1'의 값에 대해 매번 이것이 사실 일 것으로 기대합니다. –

+0

@ Lol4t0 : sizeof (long)> sizeof (int) 인 경우 long을 int로 변환하는 것은 구현에 따라 정의 될 수 있습니다. --- C++ 2003 4.7 Integral conversions –

관련 문제