Ⅰ C語言數據類型所佔位元組是和運行的機器位數有關還是編譯器有關
1)C語言一般指的是ANSI C的標准,對應的處理器分別是32位和64位的。
2)類型分為內置類型和自定義類型(非內置類型)
內置類型指的是無需聲明就可使用的類型,比如char,double,int等。
自定義類型指的是使用前必須聲明的,如struct StructName{};結構類型,int a[5];數組類型以及enum Color{};枚舉類型等。未經聲明的類型不可使用
3)ANSI C只對內置類型的大小進行了規范:
char |double| folat |int |long int| pointer
64bits 1 8 4 4 8 8
32bits 1 8 4 4 4 4
從上表可以看出,對於前三者,大小是統一的,只有long int 和pointer(指針)在不同的機器上佔用了不同的大小。他們的規則是,long int和pointer的大小等於機器位長(8位一個位元組).最後說明一點,unsigned的關鍵字和類型組合和該類型的大小相同,因為有符號和無符號只對編譯器有效,機器對他一無所知。
Ⅱ 為什麼在不同的編譯器上的C語言數據類型佔用的位元組大小都不一樣如何查看C語言不同的數據類型佔用多少位元組
不要相信數據類型的通常佔用位元組數, 比如認為int佔4位元組,這是通常情況下的佔用數
可以考慮用類似sizeof(float)這樣的方法去求取具體佔用位元組數,這個會給出准確數據
Ⅲ c語言數據長度16位和32位什麼意思
樓上不要胡說!
>>是說16位的機器就是2個,32位是4個嗎?
這句話說的不太對,
這個其實指的是編譯器的位數,
對於16位編譯器(例如,tc),int型佔2個位元組
對於32位編譯器(例如,vc,gcc),int型佔4個位元組
這里指的是編譯器的位數,不是cpu的位數
Ⅳ C語言中不同的數據類型的長度和什麼有關
和編譯器有關。
每種類型佔用的位元組數,是和編譯器直接相關的,也就是常說的編譯器的字長。
以整型系列的類型,char, short, int, long為例:
1 16位字長:
對於16位編譯器,char佔1位元組,short佔2位元組,int佔2位元組,long佔4位元組。
2 32位字長:
對於32位編譯器,char 佔1位元組,short佔2位元組,int佔4位元組,long佔4位元組。
3 64位字長:
對於64位編譯器,char佔1位元組,short佔2位元組,int佔4位元組,long佔8位元組。
Ⅳ 在c語言中,int,char,short三種類型數據在內存中所佔的位元組數由什麼決定
通常char佔1個位元組,short佔2個位元組。原因是,1個位元組可以表示一個ASCII碼,為了提高計算機的數據處理能力,short用一個位元組遠遠不足,但限於早年的存儲器體積和價格,用2個位元組也是不得以的事情。現在,存儲器的體積不再是考慮的因素,價格也不是「事」,CPU的數據寄存器已經是64位(8個位元組),32位的CPU已近末日黃昏,所以short用8個位元組表示不再是夢。所謂64位的CPU,指的就是其數據寄存器(包括指令寄存器)的寬度是64bits,一次讀取、存儲64bits最為快捷,這就是int類型數據的標准寬度。
Ⅵ c語言int類型占的位元組數因不因機子是64位還是32位的而改變啊
是和編譯器的位數有關,而不是操作系統或者CPU的位數
例如:
在16位編譯器(例如:TC)上,int型佔2個位元組
在32位編譯器(例如:VC,GCC,CFree等)上,int型佔4個位元組
Ⅶ 關於C語言中結構體所佔內存大小的疑問,我用的編譯器是VC6.0,int佔4個位元組,char型佔1個位元組,但結果為28
編譯器是自己按最大位元組對齊~
也就是說
在這裡面 int有4個位元組 都已4位元組對齊
char【20】 有20個位元組
然後char sex 1個位元組 但是對齊後變成4
最後整形是4
所以一共28
在程序前面
#pragma pack ()
就可以取消編譯器自動對齊 會輸出25
Ⅷ c語言的位元組數是什麼意思
int佔多少個位元組是由編譯器決定的,ANSI標準定義int是佔2個位元組.
TC是按ANSI標準的,它的int是佔2個位元組的.
你可以在TC里試.printf("%d",sizeof(int));結果是2;
但是在VC里,一個int是佔4個位元組的,在VC裡面,
printf("%d",sizeof(int));
cout<<sizeof(int);結果都是4.
不同的編譯器,規定也不一樣.
float,double也是一樣的,在不同的編譯器里,占的位元組是不一樣的.