C++ 整數(shù)類型

2018-03-22 15:48 更新

學(xué)習(xí)C++ - C++整數(shù)類型

整數(shù)是沒有小數(shù)部分的數(shù)字,例如2,98,?5286和0。

各種C ++整數(shù)類型在保存整數(shù)時使用的內(nèi)存量不同。

某些類型(有符號類型)可以表示正值和負(fù)值,而其他類型(無符號類型)不能表示負(fù)值。

用于描述用于整數(shù)的內(nèi)存量的通常術(shù)語是width。

C ++的基本整數(shù)類型,按照增加寬度的順序,是char,short,int,long,和C ++ 11,long long。

每個都有簽名和無符號版本。

這樣可以選擇十種不同的整數(shù)類型!

short,int,long和long long整數(shù)類型。

通過使用不同數(shù)量的位來存儲值,C ++類型short,int,long和long long可以表示最多四個不同的整數(shù)寬度。

短整數(shù)至少為16位寬。

int整數(shù)至少與short一樣大。

長整數(shù)至少為32位寬,至少與int一樣大。

長整數(shù)長至少64位寬,至少長達一個大。

您可以使用這些類型的名稱來聲明變量,就像使用int一樣:

short score;             // creates a type short integer variable 
int temperature;         // creates a type int integer variable 
long position;           // creates a type long integer variable 

如果您想知道系統(tǒng)的整數(shù)大小,您可以使用C ++工具來調(diào)查程序的類型大小。

sizeof運算符返回類型或變量的大?。ㄒ宰止?jié)為單位)。


// Writing values of variables to cout 
#include <iostream> 

int main() 
{ 
  int apple_count {15};                            // Number of apples 
  int orange_count {5};                            // Number of oranges 
  int total_fruit {apple_count + orange_count};    // Total number of fruit 
  
  std::cout << "The value of apple_count is "  << apple_count  << std::endl; 
  std::cout << "The value of orange_count is " << orange_count << std::endl; 
  std::cout << "The value of total_fruit is "  << total_fruit  << std::endl; 
} 

上面的代碼生成以下結(jié)果。

帶符號的整數(shù)類型

下表顯示了存儲帶符號整數(shù)的完整的基本類型集,即正值和負(fù)值。

為每種類型分配的內(nèi)存,因此可以存儲的值的范圍可能在不同的編譯器之間變化。

類型名稱典型尺寸(字節(jié))值范圍
signed char1-128?127
short/short int2-256?255
int4-2,147,483,648至+2,147,483,647
long/long int4-2,147,483,648至+2,147,483,647
long long/long long int8-9,223,372,036,854,775,808至9,223,372,036,854,775,807

例子

以下代碼顯示如何獲取一些整數(shù)限制。


#include <iostream> 
#include <climits>              // use limits.h for older systems 
int main() { 
     using namespace std; 
     int n_int = INT_MAX;        // initialize n_int to max int value 
     short n_short = SHRT_MAX;   // symbols defined in climits file 
     long n_long = LONG_MAX; 
     long long n_llong = LLONG_MAX; 

     // sizeof operator yields size of type or of variable 
     cout << "int is " << sizeof (int) << " bytes." << endl; 
     cout << "short is " << sizeof n_short << " bytes." << endl; 
     cout << "long is " << sizeof n_long << " bytes." << endl; 
     cout << "long long is " << sizeof n_llong << " bytes." << endl; 
     cout << endl; 

     cout << "Maximum values:" << endl; 
     cout << "int: " << n_int << endl; 
     cout << "short: " << n_short << endl; 
     cout << "long: " << n_long << endl; 
     cout << "long long: " << n_llong << endl << endl; 

     cout << "Minimum int value = " << INT_MIN << endl; 
     cout << "Bits per byte = " << CHAR_BIT << endl; 
     return 0; 
} 

上面的代碼生成以下結(jié)果。

注意

下表列出了來自climits的符號常數(shù)。

符號常數(shù)表示
CHAR_BIT字符中的位數(shù)
CHAR_MAX最大字符值
CHAR_MIN最小字符值
SCHAR_MAX最大簽名字符值
SCHAR_MIN最小簽名字符值
UCHAR_MAX最大無符號字符值
SHRT_MAX最大短值
SHRT_MIN最小短值
USHRT_MAX最大無符號短整型值
INT_MAX最大int值
INT_MIN最小int值
UINT_MAX最大無符號整數(shù)值
LONG_MAX最大長整數(shù)值
LONG_MIN最小長值
ULONG_MAX最大無符號長整型值
LLONG_MAX最大長整型值
LLONG_MIN最小長整型值
ULLONG_MAX最大unsigned long long值

初始化

初始化將賦值與聲明組合在一起。

例如,以下語句聲明n_int變量并將其設(shè)置為可能的最大類型int值:

int n_int = INT_MAX;

您也可以使用文字常量(如255)來初始化值。

您可以將變量初始化為表達式,前提是程序執(zhí)行到達聲明時表達式中的所有值都已知:

int uncles = 5;                       // initialize uncles to 5 
int aunts = uncles;                   // initialize aunts to 5 
int chairs = aunts + uncles + 4;      // initialize chairs to 14 

無符號類型

您學(xué)習(xí)的四個整數(shù)類型中的每一個都具有無法保存負(fù)值的無符號變量。

這具有增加變量可以容納的最大值的優(yōu)點。

如果short表示范圍為32,768到+32,767,則無符號版本可以表示范圍0到65,535。

對于永不為負(fù)的值,您應(yīng)該使用無符號類型,例如人口。

要創(chuàng)建基本整數(shù)類型的無符號版本,您只需使用unsigned關(guān)鍵字即可修改聲明:

unsigned short change;          // unsigned short type 
unsigned int rovert;            // unsigned int type 
unsigned quarterback;           // also unsigned int 
unsigned long gone;             // unsigned long type 
unsigned long long lang_lang;   // unsigned long long type 

unsigned是unsigned int的縮寫。

以下代碼說明了使用無符號類型。

它還顯示如果您的程序嘗試超出整數(shù)類型的限制,可能會發(fā)生什么。


#include <iostream> 
#include <climits>  // defines INT_MAX as largest int value 
#define ZERO 0      // makes ZERO symbol for 0 value 

int main() 
{ 
     using namespace std; 
     short s = SHRT_MAX;     // initialize a variable to max value 
     unsigned short sue = s;

     cout << "s has " << s << " dollars and Sue has " << sue; 
     cout << "Add $1 to each account." << endl << "Now "; 
     s = s + 1; 
     sue = sue + 1; 
     cout << "s has " << s << " dollars and Sue has " << sue; 
     s = ZERO; 
     sue = ZERO; 
     cout << "s has " << s << " dollars and Sue has " << sue; 
     s = s - 1; 
     sue = sue - 1; 
     cout << "s has " << s << " dollars and Sue has " << sue; 
     cout << "Hi!" << endl; 
     return 0; 
} 

上面的代碼生成以下結(jié)果。

整數(shù)文字

整數(shù)文字或常數(shù)是您明確寫出的整數(shù),例如212或17。

C++,像C一樣,可以在三個不同的數(shù)字基礎(chǔ)中寫入整數(shù):base 10,base 8和base 16。

C++使用第一位或第二位來標(biāo)識數(shù)字常量的基數(shù)。

如果第一位數(shù)字在1?9范圍內(nèi),則為10位(十進制);因此93是10。

如果第一位為0,第二位為1?7,則為8位(八進制);因此042是八進制,等于34進制數(shù)。

如果前兩個字符為0x或0X,則該數(shù)字為16位(十六進制);因此0x42是十六進制,等于66十進制。

對于十六進制值,字符a?f和A?F表示對應(yīng)于值10?15的十六進制數(shù)字。

這里有一些十六進制文字的例子:

Hexadecimal literals:0x1AF 0x123U 0xAL  0xcad 0xFF 
Decimal literals:    431     291U  10L   3245  255 

下面是八進制文字的一些例子。

Octal literals:       0657     0443U      012L     06255      0377 
Decimal literals:      431      291U       10L       3245      255 

0xF為15,0xA5為165(10六進制加5個)。以下代碼顯示了十六進制和八進制文字。


#include <iostream> 
int main() 
{ 
    using namespace std; 
    int my_decimal = 42;     // decimal integer literal 
    int my_hexi = 0x42;      // hexadecimal integer literal 
    int my_oct = 042;        // octal integer literal 

    cout << "my_decimal = " << my_decimal << " (42 in decimal)\n"; 
    cout << "my_hexi = " << my_hexi << " (0x42 in hex)\n"; 
    cout << "my_oct = " << my_oct << " (042 in octal)\n"; 
    return 0; 
} 

上面的代碼生成以下結(jié)果。

二進制文字

你寫一個二進制整數(shù)字面值作為前綴為0b或0B的二進制數(shù)字(0或1)的序列。

二進制文字可以使用L或LL作為后綴來表示它是long或long long類型,如果是無符號文字則為u或U。

例如:

Binary literals: 0B110101111  0b100100011U 0b1010L  0B11001101 0b11111111 
Decimal literals:        431          291U     10L        3245         255 

例2

以下代碼顯示如何以十六進制和八進制顯示值。


#include <iostream> 
using namespace std; 
int main() 
{ 
     int my_decimal = 42; 
     int my_hexi = 42; 
     int my_oct = 42; 

     cout << "my_decimal = " << my_decimal << " (decimal for 42)" << endl; 
     cout << hex;      // manipulator for changing number base 
     cout << "my_hexi = " << my_hexi << " (hexadecimal for 42)" << endl; 
     cout << oct;      // manipulator for changing number base 
     cout << "my_oct = " << my_oct << " (octal for 42)" << endl; 
     return 0; 
} 

上面的代碼生成以下結(jié)果。

例3

轉(zhuǎn)換距離


#include <iostream>                    // For output to the screen 
int main() 
{ 
  unsigned int yards =10, feet =10, inches =10; 
   
  const unsigned int feet_per_yard {3U}; 
  const unsigned int inches_per_foot {12U}; 
  unsigned int total_inches {}; 
  total_inches = inches + inches_per_foot*(yards*feet_per_yard + feet); 
  std::cout << "The distances corresponds to " << total_inches << " inches.\n"; 
  
  std::cout << "Enter a distance in inches: "; 
  std::cin >> total_inches; 
  feet = total_inches/inches_per_foot; 
  inches = total_inches%inches_per_foot; 
  yards = feet/feet_per_yard; 
  feet = feet%feet_per_yard; 
  std::cout << "The distances corresponds to " 
            << yards  << " yards " 
            << feet   << " feet " 
            << inches << " inches." << std::endl; 
} 

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號