2009-11-30 81 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)