整數(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ù)的完整的基本類型集,即正值和負(fù)值。
為每種類型分配的內(nèi)存,因此可以存儲的值的范圍可能在不同的編譯器之間變化。
類型名稱 | 典型尺寸(字節(jié)) | 值范圍 |
---|---|---|
signed char | 1 | -128?127 |
short/short int | 2 | -256?255 |
int | 4 | -2,147,483,648至+2,147,483,647 |
long/long int | 4 | -2,147,483,648至+2,147,483,647 |
long long/long long int | 8 | -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ù),例如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
以下代碼顯示如何以十六進制和八進制顯示值。
#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é)果。
轉(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é)果。
更多建議: