2009-11-30 84 views

回答

95

你可以依靠最低范围是:

  • short intint:-32,767 32,767
  • unsigned short intunsigned int:0到65,535
  • long int:-2,147,483,647至2,147,483,647
  • unsigned long int:0至4294967295

这意味着没有,long int不能被依靠存储任何10位数字。然而,C99和C++在C++ 11中引入了更大类型的long long int(这种类型通常也被作为由不包含它的较旧标准构建的编译器的扩展支持)支持。这个类型的最小范围,如果你的编译器支持的话,就是:

  • long long int:-9,223,372,036,854,775,807 9,223,372,036,854,775,807
  • unsigned long long int:0到18,446,744,073,709,551,615

这样类型将是足够大的(再,if you have it available)。


对于那些认为我已经犯下这些下界错误的笔记 - 我没有。对范围的C要求被写成允许1的补码或符号幅度整数表示,其中最低可表示值和最高可表示值仅在符号上不同。它也允许有补码表示,其中符号位1和所有值位0的值是陷阱表示而不是合法值。换句话说,int而不是需要能够表示值-32,768。

+0

标题最初也表示“C/C++”。 – caf 2013-07-24 03:11:58

+0

为什么long long int正范围==负范围 – 2016-10-12 08:02:37

+0

@mohamedab​​dallah:请参阅答案的最后一段:C标准范围是允许补码或符号幅度表示的方式。 – caf 2016-10-12 10:49:50

-1

您应该查看给定类型的numeric_limits <>模板的特化。它在标题中。

29

数字类型的大小没有在C++标准中定义,尽管最小大小是。告诉他们你的平台上什么尺寸的方法是使用numeric limits

例如,对于一个INT最大值可以发现:

std::numeric_limits<int>::max(); 

计算机不会在基地10,其工作意味着最大值将以2 n -1的形式出现,这是因为内存中表示的数量如何。采取例如八位(1个字节)

0100 1000 

最右边的位(数字)当设置为1表示2 ,下位2 ,然后2 等等,直到我们到达最左边的位,如果这个数是无符号的,则代表2 。

所以数字代表2 + 2 = 64 + 8 = 72,因为从右侧和第七位右左侧的第四位被置位。

如果我们设置的所有值至1:

11111111 

现在是数(假设无符号
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 - 1
而且我们可以看到,这是可以用8位表示的最大可能值。

在我的机器和int和长都是一样的,每个能容纳-2之间 - 1.在我的经验,现代的32位台式机上最常见的尺寸。

+0

整数类型的最小尺寸由相关标准规定(尽管确切的尺寸不是)。 – caf 2009-11-30 11:22:34

0

无符号long int可以在32位计算机上保存十位数字(1,000,000,000 - 9,999,999,999)。

7

这里的其他人会发布链接data_sizes和精度等
我要告诉你如何弄清楚你自己。
写一个小应用程序,将执行以下操作。

unsigned int ui; 
std::cout << sizeof(ui)); 

这(取决于编译器和archicture)打印2,4或8,说2个字节,4个字节长等

让我们假设它是4

你现在想要的最大值可以存储4个字节,一个字节的最大值是(十六进制)0xFF。四个字节的最大值是0x,接着是8个f(每个字节有一对f,0x告诉编译器下面的字符串是十六进制数)。现在改变你的程序分配一个值,并将结果

unsigned int ui = 0xFFFFFFFF; 
std::cout << ui; 

那最大值unsigned int可持有,以10为基表示所示。

现在可以对长时间,短裤以及任何其他INTEGER值感兴趣。

注意:这种方法不适用于浮点数(即double或float)。

希望这有助于

+1

如果您尝试使用带符号的整数,则会得到负数。阅读“two's compliment”(提供的链接),很容易获得全部范围(正面和负面)。 http://en.wikipedia.org/wiki/Twos_Compliment – 2009-11-30 11:34:34

2

对于无符号的数据类型没有符号位,所有位是数据 ;而对于有符号数据类型 MSB指示符号位,其余位用于数据。

要查找的范围内做以下的事情:

步骤:1 - >找出任何字节为给定的数据类型。

步骤2 - >应用以下计算。

 Let n = no of bits in data type 

     For signed data type :: 
      Lower Range = -(2^(n-1)) 
      Upper Range = (2^(n-1)) - 1) 

     For unsigned data type :: 
      Lower Range = 0 
      Upper Range = (2^(n)) - 1 

例如,

对于无符号整型大小= 4个字节(32位) - >范围[0,(2 ^(32)) - 1]

对于符号int大小= 4个字节(32位) - >范围[ - (2 ^(32-1)),(2 ^(32-1)) - 1]

5

,要了解你的系统的限制:

#include <iostream> 
#include <limits> 
int main(int, char **) { 
    std::cout 
    << static_cast<int>(std::numeric_limits<char>::max()) << "\n" 
    << static_cast<int>(std::numeric_limits< unsigned char >::max()) << "\n" 
    << std::numeric_limits<short>::max() << "\n" 
    << std::numeric_limits< unsigned short >::max() << "\n" 
    << std::numeric_limits<int>::max() << "\n" 
    << std::numeric_limits< unsigned int >::max() << "\n" 
    << std::numeric_limits<long>::max() << "\n" 
    << std::numeric_limits< unsigned long >::max() << "\n" 
    << std::numeric_limits< long long >::max() << "\n" 
    << std::numeric_limits< unsigned long long >::max() << "\n"; 
} 

注意long long在C99和C++ 11中只是合法的。

3

在C++中,现在使用2的恭维方法存储int和其他数据。 这意味着范围是:

-2147483648 to 2147483647 

或-2^31〜2^31-1

1位保留0,所以正值是小于一个2 ^(31)