2012-02-21 52 views
3

例如:检查长类型数据是否在int范围内的便携方式是什么?

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

我想出瓦特/在我的脑海里了这个问题,所以它不是一个真正的面试问题,因为有些人可能会问。

基本上我想编写代码来检查它没有使用<climits>,例如INT_MIN,INT_MAX。如果不是不可能的话,什么是可移植的,最有效的方法呢?由于便携,我的意思是它不应该是实现定义或平台相关的,例如,一个字节不总是8位。

+2

会比较'的sizeof(int)的==的sizeof(长)'工作? – dasblinkenlight 2012-02-21 16:20:42

+0

如果它们不相同将会怎样? – 2012-02-21 16:25:42

+0

那么他们的范围是不一样的。 – dasblinkenlight 2012-02-21 16:27:03

回答

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 2012-02-21 16:24:50

+2

对于值'1',我希望这每次都是真实的。 – 2012-02-21 16:27:13

+0

@ Lol4t0:如果sizeof(long)> sizeof(int),将long转换为int可能是实现定义的。 --- C++ 2003 4.7积分转换 – 2012-02-21 16:27:29

相关问题