共找到3條詞條名為整型的結果 展開

整型

計算機語言

計算機中的一個基本的專業術語,指沒有小數部分的數據。整型可以用十進位,十六進位或八進位符號指定,前面可以加上可選的符號(-或者+)。整形包括整型常量和整型變數,整型變數又包括短整型、基本整型、長整型,它們都分為有符號和無符號兩種版本,是一種智能的計算方式。

語法


整型值可以用十進位,十六進位或八進位符號指定,前面可以加上可選的符號(- 或者 +)。
如果用八進位符號,數字前必須加上 0(零),用十六進位符號數字前必須加上 0x。
例. 整數文字表達:【以PHP語言為例】
1
2
3
4
5
6
7
8
9
$a=1234;#
十進位數
$a=-123;#一個負數
$a=0123;#
八進位數(等於十進位的83)
$a=0x1A;#
十六進位數(等於十進位的26)
?>
在字面上,整型變數正式的結構可以為:
1
2
3
4
5
6
7
8
9
10
11
decimal:[1-9][0-9]*
|0
hexadecimal:0[xX][0-9a-fA-F]+
 
octal:0[0-7]+
integer:[+-]?
|[+-]?hexadecimal
|[+-]?octal
?>
注意:整型數的字長和平台有關,儘管通常最大值是大約二十億(32 位有符號)。
另:PHP 不支持無符號整數。

常量


八進位整常數
必須以0開頭,即以0作為八進位數的前綴。數碼取值為0~7。八進位數通常是無符號數。
以下各數是合法的八進位數:
015(十進位為13) 0101(十進位為65) 0177777(十進位為65535)
以下各數不是合法的八進位數:
256(無前綴0) 0382(包含了非八進位數碼) -0127(出現了負號)
十六進位整常數
十六進位整常數的前綴為0X或0x。其數碼取值為0~9,A~F或a~f。
以下各數是合法的十六進位整常數:
0X2A(十進位為42) 0XA0 (十進位為160) 0XFFFF (十進位為65535)
以下各數不是合法的十六進位整常數:
5A (無前綴0X) 0X3H (含有非十六進位數碼)
十進位整常數
十進位整常數沒有前綴。其數碼為0~9。
以下各數是合法的十進位整常數:
237 -568 65535 1627
以下各數不是合法的十進位整常數:
023 (不能有前導0) 23D (含有非十進位數碼)
在程序中是根據前綴來區分各種進位數的。因此在書寫常數時不要把前綴弄錯造成結果不正確。例如,數組int power_of_10[4]={0001,0010,0100,1000}的初值會被解釋為{1,8,64,1000}。
整型常數的後綴
在16位字長的機器上,基本整型的長度也為16位,因此表示的數的範圍也是有限定的。十進位無符號整常數的範圍為0~65535,有符號數為-32768~+32767。八進位無符號數的表示範圍為0~0177777。十六進位無符號數的表示範圍為0X0~0XFFFF或0x0~0xFFFF。如果使用的數超過了上述範圍,就必須用長整型數來表示。長整型數是用後綴“L”或“l”來表示的。例如: 
十進位長整常數 158L (十進位為158) 358000L (十進位為-358000)
八進位長整常數 012L (十進位為10) 077L (十進位為63) 0200000L (十進位為65536)
十六進位長整常數 0X15L (十進位為21) 0XA5L (十進位為165) 0X10000L (十進位為65536)
長整數158L和基本整常數158在數值上並無區別。但對158L,因為是長整型量,C編譯系統將為它分配4個位元組存儲空間。而對158,因為是基本整型,根據計算機的內部字長和編譯器的版本分配2或4個位元組的存儲空間。因此在運算和輸出格式上要予以注意,避免出錯。對長整型都表示不了的大數,某些編譯器規定可有64位整常數表示,後綴為“LL”或“ll”。有時,因為特殊需要,可能要對短整型進行特殊標記,只有部分編譯器支持短整型的後綴“S”或“s”。無符號數也可用後綴表示,整型常數的無符號數的後綴為“U”或“u”。例如:358u,0x38Au,235Lu均為無符號數。前綴,後綴可同時使用以表示各種類型的數。如0XA5Lu表示十六進位無符號長整數A5,其十進位為165。

變數


整型變數可分為以下幾類: 
基本型
類型說明符為int,根據計算機的內部字長和編譯器的版本,在內存中可能佔2或4個位元組(通常分別在16位機和32位機上),其取值為基本整常數。
短整型
類型說明符為short int或short,在內存中佔2個位元組,其取值為短整常數。
類型說明符為long int或long,在內存中佔4個位元組,其取值為長整常數。
4.64位整型(非ANSI標準
類型說明符為__int64、long long int或long long,在內存中佔8個位元組,其取值為64位整常數。
無符號型
類型說明符為unsigned。它可以單獨使用代表unsigned int,也可以作為前綴,都表示無符號整數,即永遠為非負的整型變數,大於0的數據範圍約擴大為原來的2倍。各種無符號類型量所佔的內存空間位元組數與相應的有符號類型量相同。但由於省去了符號位,故不能表示負數。下表列出了C++中各類整型量所分配的內存位元組數及數的表示範圍。
對比
類型說明符數的範圍分配位元組數備註
short-32768~32767■■
short int-32768~32767■■
signed int-2147483648~2147483647■■■■
unsigned int0~4294967295■■■■
long int-2147483648~2147483647■■■■
unsigned long0~4294967295■■■■
long long-9223372036854775808~9223372036854775807■■■■■■■■
unsigned long long0~18446744073709551615■■■■■■■■
__int128-0x80000000000000000000000000000000~0x7fffffffffffffffffffffffffffffff■■■■■■■■■■■■■■■■C++14及以上支持,但暫不支持cin、cout輸入輸出
unsigned __int1280~__INT128_MAX*2+1■■■■■■■■■■■■■■■■同上

簡介


【以下使用PHP語言為例】
1、定義:一個 integer 是集合 Z = {...,-2,-1,0,1,2,...} 中的一個數。
參見:任意長度整數 / GMP,浮點數和 任意精度數學庫 / BCMath。
2、語法:
整型值可以用十進位,十六進位或八進位符號指定,前面可以加上可選的符號(- 或者 +)。
如果用八進位符號,數字前必須加上 0(零),用十六進位符號數字前必須加上0x。
注意:整型數的字長和平台有關,儘管通常最大值是大約二十億(32位有符號)。
另:PHP 不支持無符號整數。
3、整數溢出:
如果你指定一個數超出了 integer 的範圍,將會被解釋為 float。同樣如果你執行的運算結果超出了 integer 範圍,也會返回 float。
PHP 中沒有整除的運算符。1/2產生出浮點數0.5。您可以總是捨棄小數部分,或者使用 round() 函數。
4、轉換為整型:
要明示地將一個值轉換為 integer,用 (int) 或 (integer) 強制轉換。不過大多數情況下都不需要強制轉換,因為當運算符,函數或流程式控制制需要一個 integer 參數時,值會自動轉換。您還可以通過函數 intval() 來將一個值轉換成整型。
參見:類型戲法。
4.1 從布爾值轉換:
FALSE將產生出0(零),TRUE將產生出1(壹)。
4.2 從浮點數轉換:
當從浮點數轉換成整數時,數字將被取整(丟棄小數位)。
注意:如果浮點數超出了整數範圍(通常為 +/- 2.15e+9 = 2^31),則結果不確定,因為沒有足夠的精度使浮點數給出一個確切的整數結果。在此情況下沒有警告,甚至沒有任何通知!
(譯者註:)在 Linux 下返回結果是最小負數(-214748),而在 Windows 下返回結果是零(0)。
【以下以C/C++語言為例,陳述一下整型的知識】:
a.C/C++對整型長度的規定是為了執行效率,將int定義為機器字長可以取得最大的執行速度;
b.C/C++中整型包括:int,char和enum,C++中還包含bool類型,C99中bool是一個宏,實際為_Bool
c.C和C++對enum的規定有所不同,這裡不描述;
d.修飾整型正負的有signed和unsigned,對於int默認為signed;
e.修飾 int 大小的有short和long,部分編譯器還擴展了一些更長的整型,比如long long和__int64, C99中增加了long long和unsigned long long;
f int 的長度與機器字長相同,16位的編譯器上int長16位,32位的編譯器上int長32位;
g short int的長度小於等於int 的長度,注意它們可能長度相等,這取決於編譯器;
h long int 的長度大於等於int 的長度,注意它們可能長度相等,這取決於編譯器;
i.char 的長度應當可以包容得下一個字元,大部分系統中就是一個位元組,而有的系統中可能是4個位元組,因為這些系統中一個字元需要四個位元組來描述;
j.char 的正負取決於編譯器,而編譯器的決定取決於操作系統,在不同的編譯器中char可能等同於signed char,也可能等同於unsigned char
總結:
a. 出於效率考慮,應該盡量使用int和unsigned int;
b. 當需要指定容量的整型時,不應該直接使用short、int、long等,因為在不同的編譯器上它們的容量不相同。此時應該定義它們相應的宏或類型,比如在VC++6.0中,可以如下定義:
[Copy to clipboard]CODE:
typedef unsigned char UBYTE;
typedef signed char SBYTE;
typedef unsigned short int UWORD;
typedef signed short int SWORD;
typedef unsigned int UDWORD;
typedef signed int SDWORD;
typedef unsigned __int64 UQWORD;
typedef signed __int64 SQWORD;
然後在代碼中使用UBYTE、SBYTE、UWORD等,這樣當代碼移植的時候只需要修改相應的類型即可。
定義自己的類型雖然在代碼移植的時候只需要修改一處即可,但仍然屬於源代碼級別的修改,所以 C++ 2.0 中將這些類型定義在模板中,可以做到代碼移植時無需修改代碼。
c. 在定義char時,一定要加上signed或unsigned,因為它的正負在不同的編譯器上並不相同。
d. 不要想當然的以為char是1位元組長,因為它的長度在不同的編譯器上並不相同。

整數溢出


如果你指定一個數超出了 integer 的範圍,將會被解釋為 float。同樣如果你執行的運算結果超出了 integer 範圍,也會返回 float。【以PHP語言為例】

轉換


要明示地將一個值轉換為integer,用(int)或(integer)強制轉換。
從布爾值轉換
FALSE 將產生出0(零),TRUE 將產生出1(壹)。
從浮點數轉換
當從浮點數轉換成整數時,數字將被取整(丟棄小數位)。
註:在 Linux 下返回結果是最小負數(-214748),而在 Windows 下返回結果是零(0)。
【以下以C/C++語言為例,陳述一下整型的知識】:
a.C/C++對整型長度的規定是為了執行效率,將int定義為機器字長可以取得最大的執行速度;
c.C和C++對enum的規定有所不同,這裡不描述;
d.修飾整型正負的有signed和unsigned,對於int默認為signed;
f int 的長度與機器字長相同,16位的編譯器上int長16位,32位的編譯器上int長32位;
g short int的長度小於等於int 的長度,注意它們可能長度相等,這取決於編譯器;
h long int 的長度大於等於int 的長度,注意它們可能長度相等,這取決於編譯器;

總結


a. 出於效率考慮,應該盡量使用int和unsigned int;
[Copy to clipboard]CODE:
typedef unsigned char UBYTE;
typedef signed char SBYTE;
typedef unsigned short int UWORD;
typedef signed short int SWORD;
typedef unsigned int UDWORD;
typedef signed int SDWORD;
typedef unsigned __int64 UQWORD;
typedef signed __int64 SQWORD;
c. 在定義char時,一定要加上signed或unsigned,因為它的正負在不同的編譯器上並不相同。
d. 不要想當然的以為char是1位元組長,因為它的長度在不同的編譯器上並不相同。