C語言的三種整型資料型別:int、short int和long int
int資料型別的位數為16位,short int資料型別的位數也是16位。而long int的位數為32位,可用來儲存比較大的整數。
short int 和 long int可以縮寫為short 和 long。
C語言中的整型資料型別int、short int 和 long int
名稱 | 全稱型別說明符 | 縮寫型別說明符 | 位數 | 範圍 |
整型 | int | int | 16位 | -32768至+32767 |
無符號整型 | unsigned int | unsigned | 16位 | 0 至 65,535 |
短整型 | short int | short | 16位 | -32768至+32767 |
無符號短整型 | unsigned short int | unsigned short | 16位 | 0 至 65,535 |
長整型 | long int | long | 32位 | -2,147,483,648 至 2,147,483,647 |
無符號長整型 | unsigned long int | unsigned long | 32位 | 0至4,294,967,295 |
整型變數的宣告方式:
int sum;
long int population;
unsigned int sum;
在一個語句中宣告多個屬於同一型別的變數:
int withd, height;
int 型別的變數初始化方式:
withd = 150; //前面已經宣告,在此進行初始化
int height = 60; //直接在一個語句中進行宣告和初始化
C語言中整型常量有三種不同的表示形式:
1、八進位制整型常量:在八進位制數值前面加字首“0”,其數碼取值為0~7。例如:054、0567、05421。
2、十六進位制整型常量:字首為“0X”或“0x“,其數碼取值為0~9、A~F 或 a~f。例如:0X3D、0XE0、0xfff等。
3、十進位制整型常量:既無字首也無後綴。例如:254、745、890等。 如將儲存為long型別,需要在數字序列最後附一個字母L 或 l 作為字尾。例如:245L、7850L、124l等
1. 其它整數型別
int 是 C 語言的基本整數型別,可以滿足我們處理一般資料的需求。C 語言還提供了四個可以修飾 int 的關鍵字:short、long、signed,以及 unsigned。利用這四個關鍵字,C
語言標準定義了以下整數型別:
1) short int(可簡寫為 short),和 int 一樣,也是有符號整數
2) long int(簡寫:long),有符號整數
3) long long int(簡寫:long long),C99 標準新增的型別,
有符號整數
4) unsigned int(簡寫:unsigned),無符號整數,不能表示負數
5) unsigned long int(簡寫:unsigned long),無符號整數,
不能表示負數
6) unsigned short int(簡寫:unsigned short),無符號整數,
不能表示負數
7) unsigned long long int(簡寫:unsigned long long),
C99 新增的型別,無符號整數
8) 所有沒有標明 unsigned 的整數型別預設都是有符號整數。
在這些整數型別前面加上 signed 可以使讀者更清楚地知道
這些是有符號整數,儘管有沒有 signed 都表示有符號整數。
例如:signed int 等同於 int 。
一般我們把 short 稱為短整型,把 long 稱為長整型,把 long long 稱為超長整型,把 int 稱為整型。unsigned 打頭的那些整數型別統稱為無符號整型。例如:我們稱 unsigned short 為無符號短整型。以此類推。
2. 宣告方式
這些整數型別的宣告方式與 int 型別的宣告方式一樣。例如:
long int estine;
long johns;
short int erns;
short ribs;
unsigned int s_count;
unsigned players;
unsigned long headcount;
unsigned short yesvotes;
long long ago; /* C99 特有 */
unsigned long long ego; /* C99 特有 */
如果您的編譯器不支援 C99 標準,那就不能使用 long long 和 unsigned long long。
3. 取值範圍(表示範圍)
標準也規定了這些整數型別的最小取值範圍。short 的最小表示範圍和 int 一樣,都是-32767 到 32767 。也就是 -(2^15 - 1)到(2^15 - 1)。其中,2^15表示 2 的 15 次方。類似地,2 的 20 次方記作2^20 ,以此類推。注意:C 語言中 2^15 並不表示 2 的 15 次方,為了書寫方便,我們姑且這麼表示。long 的最小取值範圍是 -2147483647 到 2147483647 。也就是 -(2^31 - 1) 到
(2^31 - 1) 。unsigned short的最小表示範圍和unsigned int 一樣,都是 0 到 65535(2^16 - 1)。unsigned long 的最小取值範圍是 0 到 4294967295(2^32 - 1)。long long的最小取值範圍是 -9223372036854775807(-(2^63 - 1))到 9223372036854775807(2^63 - 1);unsigned long long 是 0 到 18446744073709551615(2^64 -
1)。
標準規定,int 的表示範圍不能小於 short 的表示範圍,long 的表示範圍不能小於 int 的表示範圍。這就是說 short 型變數佔用的空間可能比 int 型變數少,而 long 型變數佔用的空間可能比 int 型變數多。16 位(bit)的計算機中,int 和 short 一般都是 16 位,而 long 是 32位;32位的計算機中,short一般是 16 位,而long和int是 32位。TC2(16位的編譯器)中,int是16位的;而
Dev-C++(32 位的編譯器)中,int 是 32 位的。
使用 unsigned int 宣告的變數只能表示非負整數(0 和正整數)。如果 int 是 16 位的話,那麼 unsigned int 的表示範圍是 0 到 65535(2^16 - 1)。這是因為 unsigned 不需要符號位,可以把 16 個位全都用於表示整數。而 int 需要一個位作為符號位,用於表示正負,只有 15 個位用於表示整數。
目前,long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。具體某個編譯器到底使用多少位來表示這些型別,我們可以用運算子 sizeof 來獲取。例如:
printf( "%lu\n", (unsigned long)sizeof(int) * 8 ); /* 輸出 int 的位數 */
printf( "%zu\n", sizeof(short) * 8 ); /* 輸出 short 的位數 */
sizeof 運算子返回其運算元佔用空間的大小,以位元組(Byte)為單位。注意,C 定義位元組的大小為 char 型別的大小。char 通常是 8 位(bit)的,當然也可以更大。這裡我們假設 char 是 8 位的。
sizeof 的用法我們以後會講到,現在只要有個印象就好了。第二句中的 %zu 是 C99 特有的,如果您的編譯器不支援 C99(準確地說,應該是如果您的編譯器使用的庫函式不支援 C99),執行結果將會出錯。
4. 整數型別的選擇
如果您要處理的只是非負整數,那麼應該優先使用 unsigned 打頭的那些整數型別。如果您要處理的整數超出了 int 所能表示的範圍,並且您的編譯器中,long 的表示範圍比 int 大,那就使用 long。不過,若非必要,儘量不要用 long,因為它可能會降低程式執行效率。有一點要注意:如果您的編譯器中,long 和 int 都是 32 位的,並且您需要使用 32 位整數,那麼應該用 long,而不要用
int。只有這樣,我們的程式才可以安全地移植到 16 位的計算機,因為 16 位的計算機中,int 一般也是 16 位的。類似地,如果您需要使用 64 位整數,那就用 long long。如果 int 是 32 位的話,那麼使用 short 可以節省空間,不過您得確保您要處理的整數不會超出 short 的表示範圍。這種“節省”對記憶體大的計算機來說,是沒什麼意義的。
5. long 型常量和 long long 型常量
一般來說,整數常量是被當作 int 型別來儲存的。如果我們使用的整數常量超出了 int 的表示範圍,C 語言規定編譯器自動使用 unsigned int 來處理這個常量。如果 unsigned 也不足以表示這個常量的話,編譯器就會用 long。如果還表示不了的話,那就依次用 unsigned long,long long,unsigned long long。如果 unsigned long long 也表示不了,那麼編譯器就沒轍了。注意:long long 和 unsigned long long
是 C99 特有的。例如:如果 int 是 16 位的話,它就表示不了常量 1000000。編譯器會使用 long 來處理這個常量,因為 unsigned int 也表示不了 1000000 。
同樣,十六進位制和八進位制整數常量通常也是被作為 int 來處理。但是,當我們使用的常量超出了 int 的表示範圍後,編譯器會依次使用unsigned int,long,unsigned long,long long 和 unsigned long long。直到所使用的型別足以表示那個常量為止。
有時,我們使用的是較小的常量,但是我們希望這個常量被當作 long 來處理,這就需要在這個常量後面加上字尾 l(小寫字母 l)或者 L(大寫字母 L)。我們應該避免使用 l ,因為 l 容易和數字 1 混淆。例如:整數常量 7 是被作為 int 來處理的,但整數常量 7L(或者 7l)是被作為 long 來處理的。類似地,在整數常量後面加上字尾 ll 或者 LL ,這個常量就會被當作 long long 來處理。例如:3LL 。如果想使用無符號整數常量的話,還要配合使用字尾
u 或者 U 。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。
這些字尾也可以用於十六進位制和八進位制整數常量。例如:020L,010LL,0x30uL,0x40ull 。
參考資料:C Primer Plus, 5th Edtion By Stephen Prata
The C Programming Language 2e By K&R
C99 標準
整型常量
十進位制、八進位制和十六進位制的整型常量可加字尾以指示型別,如下表所示。
表 2–1 資料型別字尾
字尾
型別
u 或 U |
unsigned |
l 或 L |
long |
ll 或 LL |
long long [long long 和 unassigned long long 在 -xc99=none 和 -Xc 模式下不可用。] |
lu、LU、Lu、lU、ul、uL、Ul 或 UL |
unsigned long |
llu、LLU、LLu、llU、ull、ULL、uLL、Ull |
unsigned long long |
如果設定 -xc99=all,編譯器將根據常量大小,使用以下列表中可以表示該值的第一項:
-
int
-
long int
-
long long int
如果值超過 long long int 可表示的最大值,編譯器會發出警告。
如果設定 -xc99=none,則為無後綴常量指定型別時,編譯器將根據常量大小,使用以下列表中可以表示該值的第一項:
-
int
-
long int
-
unsigned long int
-
long long int
-
unsigned long long int
相關推薦
C語言的三種整型資料型別:int、short int和long int
int資料型別的位數為16位,short int資料型別的位數也是16位。而long int的位數為32位,可用來儲存比較大的整數。 short int 和 long int可以縮寫為short 和 long。 C語言中的整型資料型別int、
C語言中各種整型型別所佔位元組數
平臺: 64位編譯器+LINUX+Gcc #include<stdio.h> main() { char a; char* b; short int c; int d; unsigned int e
C語言三種方法調用數組
技術 png 順序 特性 logs 元素 %d img etc 1 #include <stdio.h> 2 /********************************* 3 * 方法1: 第一維的長度可以不指定 * 4 * 但必須指定第二
Linux C語言教程(一) 資料型別
一、基礎型別 1.1 整型 整型常量的第一個字元是數字0,該常量會被視作八進位制,千萬不要為了格式對齊,將十進位制整型寫成八進位制。 1.1.2 列舉 1.2 浮點型 1.3 指標 1.3.1 字元指標 C語言是靜態弱型別語言,型別在編譯時需要確定,對於st
【C語言】typedef(自定義資料型別)與#define(巨集定義)用法比較
不管是在C語言還是在C++中,typedef這個詞都不少見,當然出現頻率較高的還是在C程式碼中。typedef和#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了。 1.巨集定義(#define) 巨集定義又稱為巨集代換
C語言中關於指標的資料型別和指標運算的小結
有關指標的資料型別小結 記憶訣竅: 容易混淆的幾個int *p[n] 、int (*p)[n],其中int *p[n]是一個數組,陣列的元素是指標;int (*p)[n]是個指標,是一個指向二維陣列的
C語言無符號整型轉換字串,字串轉換無符號整型
char* UInt32toStr(unsigned int n) { char buf[10] = ""; static char str[10]=""; unsigned int i = 0; unsigned
〖C語言學習筆記 〗(二) 資料型別
前言 本文為c語言的學習筆記,很多隻是留下來佔位的 資料型別 助記:變數就是在記憶體中挖個坑並給這個坑命名,而資料型別就是挖記憶體的坑的尺寸 基礎型別 整數型別: short int int long int long long int 浮點數型別: float :單精度 double:雙精度 lon
C語言中的整型溢位和移位溢位
1 整型溢位 原文連結:https://coolshell.cn/articles/11466.html 1.1 無符號整型溢位和有符號整型溢位 對於unsigned整型溢位,C的規範是有定義的——“溢位後的數會以2^(8*sizeof(type))作模運
指標、字串與整型資料型別的轉換
再也不用小心翼翼的實驗各種資料型別轉換的API看看是否能達到自己想要的效果。只需強制型別轉換與位運算結合,各種資料型別轉換就能很輕鬆的實現。 拋磚引玉一下。 #include "Windows.h" /////////////////////////////////////
C語言三種迴圈反彙編分析
#include <stdio.h> #include <stdlib.h> int main() { 00AB13D0 push ebp 00AB13D1 mov ebp,esp 00AB13D3 sub
C語言三種方法實現字串左旋
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void
單鏈表的基本操作(C語言)//以整型為例
單鏈表與陣列相似,但是單鏈表堆記憶體的運用更加的方便,能夠充分的利用零散的記憶體,在中間新增或者刪除一個或多個元素時不需要像陣列一樣移動大量的元素。單鏈表的操作中,涉及到單鏈表元素變化的許耀中指向指標的指標操作。 下面是單鏈表的兩種建立方式以及其
C/C++ 指標小結——指標與其它資料型別(陣列、字串、函式、結構體)的關係
一、指標與陣列和字串 1、指標與陣列 當宣告數時,編譯器在連續的記憶體空間分配基本地址和足夠的儲存空間,以容納陣列的所有元素。基本地址是陣列第一個元素(索引為0)的儲存位置。編譯器還把陣列名定義為指向第一個元素的常量指標。 元素的地址是通過索引和資料型別的比例因子來計算的;例如: x[3
Python_pandas 兩種主要的資料型別(Series、DataFrame)
因為是數學專業,最開始深入學習的是MATLAB(下面簡稱M),感受最深的就是M的簡單高效,高精度,不管什麼東西,統統放到陣列(或者說矩陣)裡面,天哪嚕,不可思議,和C語言、C++相比,這玩意就是個天生的資料實驗室利器。後來用M做了個GUI,在編譯成C風格的exe時花了大心
Java併發(十八):阻塞佇列BlockingQueue BlockingQueue(阻塞佇列)詳解 二叉堆(一)之 圖文解析 和 C語言的實現 多執行緒程式設計:阻塞、併發佇列的使用總結 Java併發程式設計:阻塞佇列 java阻塞佇列 BlockingQueue(阻塞佇列)詳解
阻塞佇列(BlockingQueue)是一個支援兩個附加操作的佇列。 這兩個附加的操作是:在佇列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。 阻塞佇列常用於生產者和消費者的場景,生產者是往佇列裡新增元素的執行緒,消費者是從佇列裡拿元素的執行緒。阻塞佇列就是生產者
弄懂進位制、bit、java基本資料型別(byte、short、int 、char 、String)、ASCII、Unicode、UTF-8、UTF-16的關聯關係及UTF-8、UTF-16編碼原理
首先普及一下基本概念: 1.數值(百度百科):指的是用數目表示的一個量的多少; 2.進位制(百度百科):也就是進位計數制,是人為定義的帶進位的計數方法。對於任何一種進位制---X進位制,就表示每一位置上的數運算時都是逢X進一位。 十進位制是逢十進一,十六進位制是逢十六進一,二進位制就是逢二進
常見三種字元編碼的區別:ASCII、Unicode、UTF-8
什麼是字元編碼? 計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),如果要表示更
python基礎資料型別:dict(字典)和近期知識點總結__005
字典dict 1、資料型別劃分:可變資料型別,不可變資料型別 (1)不可變資料型別(可雜湊):str、int、bool、元組 (2)可變資料型別(不可雜湊):dict、list、set 2、dict: key必須是不可變資料型別:可雜湊,鍵一般是唯一的,如果重複,會替換前面的,值
[Python] Python資料型別(一) 整數、浮點數和字串
1.識別符號和關鍵字: 為物件引用賦予的名稱稱為識別符號,有效的識別符號包括引導字元和後續字元,只要是Unicode編碼的字母,都可以充當引導字元,後續字元可以是數字,下劃線,或任意非空字元; 1.識別符號大小寫敏感; 2.識別符號不能使用關鍵字; 3.