c語言的char,short,int和long型別分別有多長

2022-02-24 07:13:55 字數 4889 閱讀 8464

1樓:小夏在深圳

char就是1位元組(固定不變),short不少於2位元組,int不少於short,long不少於4位元組,且long不少於int,long long不少於long。

除了char,其他整型範圍都是相對而言的,確保後一種的寬度不低於前一種即可(可能相等),在不同的年代,計算機硬體發展不同,記憶體、外存容量也不同,主流編譯器在設計的時候會綜合考慮計算機硬體的情況,來設計每一種資料型別的實際寬度。

char型在任何情況下都是佔1個位元組,而比如int型,它的長度與環境的字長相同,在16位的環境中,它佔16位,2個位元組;32位環境中佔4個位元組。

擴充套件資料

在c語言中可以用sizeof運算子,獲取資料型別或者變數所佔的記憶體位元組數。示例**如下:

#include int main()

printf("%d\t%d\t%d\n", sizeof(int), sizeof(short), sizeof(long));

return 0;}

2樓:小費

其長度分別為一位元組,至少兩位元組,至少兩位元組和至少4位元組。除此之外,不要再依賴任何約定。

char型別的長度被定義為一個8位位元組,這很簡單。short型別的長度至少為兩位元組。在有些計算機上,對於有些編譯程式,short型別的長度可能為4位元組,或者更長。

int型別是一個整數的「自然」大小,其長度至少為兩位元組,並且至少要和short型別一樣長。在16位計算機上,int型別的長度可能為兩位元組;在32位計算機上,可能為4位元組;當64位計算機流行起來後,int型別的長度可能會達到8位元組。這裡說的都是「可能」,例如,早期的motorala 68000是一種16/32位的混合型計算機,依賴於不同的命令列選項,一個68000編譯程式能產生兩位元組長或4位元組長的int型別。

long型別至少和int型別一樣長(因此,它也至少和short型別一樣長)。long型別的長度至少為4位元組。32位計算機上的編譯程式可能會使short,int和long型別的長度都為4位元組——也可能不會。

如果你需要一個4位元組長的整型變數,你不要想當然地以為int或long型別能滿足要求,而要用typedef把一種固有的型別(一種確實存在的型別)定義為你所需要的型別,並在它的前後加上相應的#ifdef指令:

#ifdef four_byte_long

typedef long int4;#endif如果你需要把一個整型變數以位元組流的方式寫到檔案中或網路上,然後再從不同的計算機上讀出來,你可能就會用到這樣的型別。

如果你需要一個兩位元組長的整型變數,你可能會遇到一些麻煩!因為並不一定有這樣的型別。但是,你總是可以把一個較小的值存放到一個由兩個char型別組成的陣列中。

在c語言型別說明中,int、char、short等資料型別的長度

3樓:匿名使用者

具體不大一樣,char型在任何情況下都是佔1個位元組,而比如int型,它的長度與環境的字長相同,在16位的環境中,它佔16位,2個位元組;32位環境中佔4個位元組。

所以,如果在程式設計中牽扯到型別或變數的字長問題,建議用sizeof()獲取,較為保險,不要想當然的認為多少就是多少

4樓:阿冬

c語言標準中對於資料型別所佔寬度是這樣定義的:

char就是1位元組(固定不變),short不少於2位元組,int不少於short,long不少於4位元組,且long不少於int,long long不少於long。

也就是說,除了char,其他整型範圍都是相對而言的,確保後一種的寬度不低於前一種即可(可能相等),在不同的年代,計算機硬體發展不同,記憶體、外存容量也不同,主流編譯器在設計的時候會綜合考慮計算機硬體的情況,來設計每一種資料型別的實際寬度。

5樓:嘎嘎的壞壞先生

你要問什麼呢?就是選c啊。

32位和64位系統,c語言中char,short,int,long,char*,int*,int**各佔多少位元組

6樓:

1、在32位系統中:

char(1)位元組

short(2)位元組

int(2)位元組

long(4)位元組

char*(4)位元組

int*(4)位元組

int**(4)位元組

2、在64位系統中:

char(1)位元組

short(2)位元組

int(4)位元組

long(8)位元組

char*(4)位元組

int*(4)位元組

int**(4)位元組

擴充套件資料在c++中short佔2位元組,int、float、long都佔4位元組,double佔8位元組。

指標長度和地址匯流排有關。因為指標記錄的就是一個地址,那麼32位的就是4位元組,64位的就是8位元組。

char佔1位元組,short佔2位元組,int、float、long都佔4位元組,double佔8位元組,任意型別的指標都佔4個位元組。

7樓:肯帕奇諾

這個和編譯器有關。不同的編譯器不一樣。

在c語言中,int,char和short三種型別資料在記憶體中所佔的位元組數 40

8樓:蔣金多多多

總結一下哈

:針對bai大部分du32位機器來說所佔記憶體是:zhi char 字元型dao 1個;int整型2 個;short 2 個;但是,不同專的屬機器,和不同的編譯軟體下,都會不同。

所以你可以用sizeof()函式測試一下。例sizeof(char);

這裡補充下我的答案,之前回答這個問題時候,自己還是一名微控制器開發愛好者,c51微控制器中的int確實是16位,兩個位元組。

而現在的我從事應用軟體開發,在這些編譯器中(比如vs、gcc),int一般都是4位的(無論32位還是64位)。事實上,一個比較官方的解釋是:編譯器可以根據自身硬體來選擇合適的大小,但是需要滿足約束:

short和int型至少為16位,long型至少為32位,並且short型長度不能超過int型,而int型不能超過long型。這即是說各個型別的變數長度是由編譯器來決定的。

9樓:

16位編譯bai器

char :1個字

du節zhi

char*(即指標變數): 2個字dao節回short int : 2個位元組

int: 2個位元組

unsigned int : 2個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

32位編譯器

答char :1個位元組

char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

64位編譯器

char :1個位元組

char*(即指標變數): 8個位元組

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 8個位元組

long long: 8個位元組

unsigned long: 8個位元組

10樓:匿名使用者

理論像樓上說的這樣,實際上int型變數要看機器32位和64位機器是不同的,你可以用

sizeof()函式測試一下

11樓:六閒村

字元型 char 1 位元組

整型 int 2 位元組zhishort 2 位元組

長整dao型 long 4 位元組單精回度答 float 4 位元組雙精度 double 8 位元組

12樓:

完全同意二樓的說法。不同的機子位數是不一樣的!

在c語言中,int型別,long型別,float型別,double型別和char型別在16位和32位計算機中各佔幾個位元組?

13樓:小破孩之父

int型別,long型別,float型別,double型別和char型別

16位 2 4 4 4 1

32位 4 4 4 8 1

其實我覺得和編譯器也有關係

14樓:手機使用者

其實根據具體機器和編譯器有所不同,你用sizeof()這個函式看吧

15樓:通安易速璧

樓上正解。ansic標準裡是沒有規定佔多少位元組的,準確地說與你的計算機cpu位數和作業系統位數無關,型別大小是由編譯器廠商compiled時定義的,具體你可以在你編譯器sizeof看一下。

16樓:伍初陽菅英

不同的編譯器所規定的位元組數有所差異,可以用函式sizeof()進行

測試,例如想測試int型別佔多少位元組結果就是int型別所佔的位元組數!

c語言的問題,C語言的問題

union是聯合體,其中的所有變數共用一片記憶體空間,該空間長度為union中最長的變數長度,即int陣列i 2 的長度8。union會牽涉到大小端問題,而題中給出的陣列的第0個元素在低位並不能說明機器為大端序還是小端序,因為陣列的生長方向永遠向上,和大小端以及堆疊的生長方向沒有關係。這意味著這道題...

有關C語言的,有關c語言的?

第4行改為 int x,y,z 8 12行 加入變數int result 0 case result x y case result x y case result x y printf result 有關c語言的?有關c語言 toss 函式演算法有問題吧?不知道你那個演算法是什麼意思,有什麼依據!...

C語言的問題,C語言問題,求助

1.設x的值為3,則表示式 x x x x 的值為?x先進行4次加1運算為7,後再相加為28 2.用long a 0xffffff int b char c 定義。執行b a,c b b後。b c的值為?a為長整型三個位元組為全1,賦值給b後b是整型,b的2個位元組也是全1,但b是有符號整型第一位元...