C語言資料型別所佔位元組是和執行的機器位數有關還是編譯器有關

2023-01-03 18:55:55 字數 5755 閱讀 2725

1樓:種燒餅的怪叔叔

1全部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的關鍵字和型別組合和該型別的大小相同,因為有符號和無符號只對編譯器有效,機器對他一無所知。

2樓:赧聽筠繩卉

作業系統是不管這些的,int佔多少位元組,double佔多少位元組,這些東西有一些是c語言標準規定的,有一些規定的不是特別死的,就由編譯器決定。

c語言中不同的資料型別的長度和什麼有關

3樓:張飛

int型變數有時候佔4個位元組(在win32),有時候佔2個位元組(在dos)

這個int型別的大小到底是跟編譯器有關,還是跟cpu有關,還是跟作業系統有關?

所謂的16位32位64位系統是由cpu決定的,由機器指令的定址、暫存器位數決定的

os受cpu的限制,但在32位的cpu下16位的os也可以跑(就向上面提到的所謂純dos)

很多os是向前相容的,就是使以前的程式也能執行,如果編譯器本身是16位時代做的,那麼os會提供乙個模擬16位的子環境供這個編譯器使用

2. int和void*長度應該是一樣的(16位的時候的20位的指標是兩個16位錯位加起來的)  非要轉牛角尖的話,int只是語言定義裡面的乙個關鍵字,只對compiler可見,complier說它是幾位就是幾位,和os/cpu都沒關係永遠都用sizeof是最安全的辦法,但sizeof只是編譯時常量,不能做到二進位制相容(移植)

3 .說int和void*一樣長只是因為在一般情況下它們都應該可以放到單個暫存器裡,其實這樣說很不確切,還是不要這樣理解的好,說在xx位的cpu上int是多少位只是因為這級別的cpu有對xx位資料進行操作的單條指令(因為暫存器是xx位)(可能會有擴充套件指令,我不清楚,但關鍵看暫存器的位數),從而編譯器就圖個方便把int做為xx位,這也不一定的,譬如以後64位機器出來了,可能編譯器只是把long擴到64位,而int還是當作32,也挺合適的

4.這也就是為什麼很多程式不用int,short,long,而是自己定義int32_t,   int16_t,   uint32_t,   ...,以後不管cpu/compiler怎麼變,它只需要改改自己的typedef,是不是覺得short,   unsigned   short(or   word)定義出來的就一定是16位而long,   unsigned   long(dword)定義出來的就一定是32位呢?

word和dword我是相信的,因為它們是m$vc裡typedef了的,剩下的不還是依賴於編譯器麼?

5.float存在的理由是因為存在浮點數,double存在的理由是因為需要處理精度更高的浮點數,int存在的理由是因為存在整數,long存在的理由是需要處理值域更大的整數,short存在的理由是為了節省空間處理值域較小的整數,int的意義在於當你需要定義乙個迴圈變數(i=0;   i<100;   i++)的時候,你不需要費腦筋考慮到底用long還是用short,要不要加unsigned.............

標準之所以沒有規定int、short、long的位數而把它們留給編譯器自己決定,就是為了在硬體進化的時候編譯器可以隨之進化呀。

4樓:風若遠去何人留

和編譯器有關。

每種型別占用的位元組數,是和編譯器直接相關的,也就是常說的編譯器的字長。

以整型系列的型別,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位元組。

5樓:匿名使用者

應該和作業系統有關,32位作業系統和64位作業系統int型的長度就不一樣

6樓:金色潛鳥

c 語言的「標準」來自 ansi c.

ansi c 規定了:

short int, long int, unsigned short int, unsigned long int 型

ansi c 沒有規定 int 型

那麼 int 型 到底 等於 short int 還是 long int 取決於 編譯器自己。

c 語言 最早在pdp-11 unix 系統上開發, 它是 dec產 16位計算機。short int 是 16位,long int 是 32位,

相應的 float 是 32位,double 是 64位,char 是 8位。這個標準一直被繼承了下來。所以 這個標準 同 電腦和電腦作業系統無直接關係。

另乙個傳統是硬體儲存器的單位是位元組:8位。很自然,作業系統,也習慣以位元組為單位。產量最多的是32位機。ansi c 的標準,與它們 很般配。

現在開始,微機開始向 64位過渡,於是,有的編譯器增加了 long long int 之類的變數。變數佔多少位元組取決於編譯器。而編譯器自身的開發書寫當然 受 硬體和作業系統影響。

c語言中不同資料型別在記憶體中所佔據的位元組大小是多少?

c語言整型資料int佔幾個位元組

7樓:加百列

不同的編譯器,佔據的位元組也不同,具體如下表所示:

編譯器可以根據自身硬體來選擇合適的大小,但是需要滿足約束:short和int型至少為16位,long型至少為32位,並且short型長度不能超過int型,而int型不能超過long型。這即是說各個型別的變數長度是由編譯器來決定的,而當前主流的編譯器中一般是32位機器和64位機器中int型都是4個位元組。

8樓:匿名使用者

1、16位編譯器

char :1個位元組

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

short int : 2個位元組

int: 2個位元組

unsigned int : 2個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

2、32位編譯器

char :1個位元組

char*: 4個位元組

short    int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

整型資料的一般分類如下:

1、基本型:型別說明符為int,在記憶體中佔2個位元組。

2、短整型:型別說明符為short int或short。所佔位元組和取值範圍均與基本型相同。

3、長整型:型別說明符為long int或long,在記憶體中佔4個位元組。

4、無符號型:型別說明符為unsigned。無符號型又可與上述三種型別匹配而構成:

1)無符號基本型:型別說明符為unsigned int或unsigned。

2)無符號短整型:型別說明符為unsigned short。

3)無符號長整型:型別說明符為unsigned long。

9樓:

在16位 int是2個位元組,long是4個位元組。在32位 int是4個位元組,long是4個位元組。在64位 int是4個位元組,long是8個位元組。

一般long比short,int都長。在32位 long long 是8個位元組。

10樓:匿名使用者

短整型2個,整型 4個位元組,長整型8個位元組

不同環境不一樣

11樓:

32位系統:int是4位元組

12樓:匿名使用者

看編譯器。

你可以用

sizeof(short)

sizeof(int)

sizeof(float)

看一下就知道幾個位元組。

c語言中int型字長和什麼有關

13樓:呼延駿年

這個和作業系統有關,一般int的長度都會採用機器字長,比如win32系統,int佔4位元組,32位;

如果是64位主機,int佔64位,但這不是一定的,還要看編譯器型別等因素。

在c語言中,double、long、unsigned、int、char型別資料所佔位元組數和機器字長及編譯器有關係: 所以,int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則(ansi/iso制訂的):

sizeof(short int)<=sizeof(int)

sizeof(int)<=sizeof(long int)

short int至少應為16位(2位元組)

long int至少應為32位。 unsigned 是無符號的意思。

例如:16位編譯器

char :1個位元組

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

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個位元組

C語言中基本資料型別有哪些,c語言簡單資料型別有哪些

void 宣告函式無返回值或無引數,宣告無型別指標,顯示丟棄運算結果。char 字元型版 型別資料權,屬於整型資料的一種。int 整型資料,表示範圍通常為編譯器指定的記憶體位元組長。float 單精度浮點型資料,屬於浮點資料的一種。double 雙精度浮點型資料,屬於浮點資料的一種。bool 布林型...

c語言資料型別轉換規則類似題目

表示式的結果double型的,但是由於c是float型,所以表示式的賦值結果還是float型 在c語言中,不同資料型別在進行運算時首先要轉換成同一型別,一種是自動轉換,二是強制轉換,如 int a 將a強制轉換為int型箭頭是轉換方向 char,short int unsigned long,flo...

學習過的c語言程式的資料型別和運算子有哪些

c的資料型別包括 整型 字元型 實型或浮點型 單精度和雙精度 列舉型別 陣列型別 結構體型別 共用體型別 指標型別和空型別 c語言的運算子包含的範圍很廣泛,共有34種運算子。c語言把括號 賦值 強制型別轉換等都作為運算子處理。圓括號 方括號 指標 成員 邏輯非 自加 自減 單目運算子 sizeof ...