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 ...