C語言裡int型別到底為多長?

時間 2021-05-30 10:05:56

1樓:gesturewei

C語言定義的int就是不比short短,不比long長,目前常見平台上實現的都是32位。整數長度不明確這個算是C語言遺留問題,所以考慮用C99新加的stdint.h就好了,這個標頭檔案裡面定義了可移植整數型別,即int32_t int64_t等等。

現在大部分編譯器都支援C99標準,少部分不支援的比如msvc,完全可以用平台相關整數重新定義,比如typedef DWORD uint32_t,也會有非常明確的整數長度

2樓:Belleve

和平台相關。C 如此做是因為很多早期的小型機和大型機字長(Word length)根本不是 2 的冪,如 DEC 的 PDP-10,這個機器的字長是 36 位,在它上面的乙個 C 編譯裡,char 的長度是 9 位,short 是 18 位,int 和 long 是 36 位。

3樓:Muhy

int暫時只碰到32位的。

該注意的是long,這玩意兒我在安卓上是64位的,用mingw是32位的,坑得一批。

後來我全用int32和int64這樣來表示了,除了for迴圈裡的i。

4樓:Xpecya

歪個樓c語言早年的設計確實這方面很讓人頭疼,所以新設計的語言,像rust,資料型別直接就叫i32,i64,想要幾位要幾位,長度一目了然。

5樓:東雲研究所的貓

乙個 Byte 只是普遍的實現是 8 個 bit 的,它理論上可以是任何位數

至於 C 的 int 型別佔位視實現而定,至少16位Reference:

Arithmetic types

6樓:

byte是乙個位元組,所以是8位

這是不對的,"byte" 就是 "位元組",差別是前者為英文,後者為中文。在C/C++中,一位元組未必是8bits。

根據C++標準,除了char必然是1byte之外,其它都是實現定義的。甚至包括1 byte是多少bits都是實現定義的。規則如下:

char為乙個位元組,乙個位元組至少8bits,具體是多少bits得看CHAR_BIT巨集的定義;

short至少有16bits的寬度,具體是多少bits得列印出 sizeof(short)*CHAR_BIT;

long至少有32bits的寬度,具體是多少bits得列印出 sizeof(long)*CHAR_BIT;

long long至少有64bits的寬度,具體是多少bits得得列印出 sizeof(long long)*CHAR_BIT;

必須滿足 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

一般而言,編譯器的說明書中都會告訴你它用的是哪種資料模型,以下是常見的資料模型

TYPELP32 ILP32 LLP64 LP64 ILP64

char8 8 8 8 8

short 16 16 16 16 16

int16 32 32 32 64

long32 32 32 64 64

long long 64 64 64 64 64

pointer 32 32 64 64 64

在x64中,gcc/clang選擇使用LP64,而vc選擇使用LLP64。

(知乎的排版捉摸不定,我還是貼個圖吧

如果你需要乙個固定長度的整型,那麼你就不應該使用int/long等,而是代替以 int32_t 等。

舉個例子吧,假設我需要乙個無符號的64bits的整型,那麼我用C語言應該這麼做:

#include

#include

#include

intmain

(void)

小白求解 c語言型別轉換int轉double後除法輸出有問題 加減乘都沒有

Fujie Chen 你一開始的 double a b 實際上做的是整型a除以整型b得到乙個整型結果然後強制轉換到double,運算過程中因為都是整型變數,所以直接捨棄小數字。第二次的 double a b 做的呢是先把a強制轉換成double,再去除以b。實際上是浮點型變數除以整型變數,做運算的時...

C 語言中 main void main 和 int main void 有什麼區別?

Cosmia Fu 為啥沒人用這種形式呢?int main int argc,char argv 我比較喜歡這一種 和int main int argc,char argv,char env Leon int main void 表示返回乙個整數值,不接收任何引數。main 按照老的C語言標準,不寫...

為什麼C語言要有 int 作為 main 函式的返回值,而不是 void?

main函式的返回值會被shell捕獲,並存到乙個環境變數中。在一些main loop結構的嵌入式系統中,main的返回值沒太有意義,因為嵌入式系統的軟體不會結束 上電後一直執行 或者在一些練習性質的程式中,我們也不太關注main函式的返回值。linux系統有個設計理念 乙個程式只做一件事情,並把它...