int型變數有時候佔4個位元組(在win32),有時候佔2個位元組(在dos)
這個int型別的大小到底是跟編譯器有關,還是跟cpu有關,還是跟作業系統有關?
所謂的16位32位64位系統是由cpu決定的,由機器指令的定址、暫存器位數決定的
os受cpu的限制,但在32位的cpu下16位的os也可以跑(就向上面提到的所謂純dos)
很多os是向前相容的,就是使以前的程式也能執行,如果編譯器本身是16位時代做的,那麼os會提供乙個模擬16位的子環境供這個編譯器使用
int和void*長度應該是一樣的(16位的時候的20位的指標是兩個16位錯位加起來的)
非要轉牛角尖的話,int只是語言定義裡面的乙個關鍵字,只對compiler可見,complier說它是幾位就是幾位,和os/cpu都沒關係
永遠都用sizeof是最安全的辦法,但sizeof只是編譯時常量,不能做到二進位制相容(移植)
說int和void*一樣長只是因為在一般情況下它們都應該可以放到單個暫存器裡,其實這樣說很不確切,還是不要這樣理解的好,說在xx位的cpu上int
是多少位只是因為這級別的cpu有對xx位資料進行操作的單條指令(因為暫存器是xx位)(可能會有擴充套件指令,我不清楚,但關鍵看暫存器的位數),從而編
譯器就圖個方便把int做為xx位,這也不一定的,譬如以後64位機器出來了,可能編譯器只是把long擴到64位,而int還是當作32,也挺合適的
呵呵,這也就是為什麼很多程式不用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了的,剩下的不還是依賴於編譯
器麼?
float存在的理由是因為存在浮點數,double存在的理由是因為需要處理精度更高的浮點數,int存在的理由是因為存在整數,long存在的理由是需要處理值域更大的整數,short存在的理由是為了節省空間處理值域較小的整數
int的意義在於當你需要定義乙個迴圈變數(i=0; i<100; i++)的時候,你不需要費腦筋考慮到底用long還是用short,要不要加unsigned.............
標準之所以沒有規定int、short、long的位數而把它們留給編譯器自己決定,就是為了在硬體進化的時候編譯器可以隨之進化呀。
int佔幾個位元組?
class program19 string占用的位元組數和編碼有關係,如果是utf8則每個漢字占用3個位元組,如果是gb2312則占用2個位元組 2 而在實際的執行中,到底分配多少位元組是和編譯器有關係,來看一下c 生成好的exe檔案的il static void main 看一下il metho...
double佔幾個位元組
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個位元...
C string型別佔幾個位元組
在c語言中我們操作字串肯定用到的是指標或者陣列,這樣相對來說對字串的處理還是比較麻煩的,好在c 中提供了 string 型別的支援,讓我們在處理字串時方便了許多。這篇文章並不是講解 string 型別的用法,而是講解我個人比較好奇的問題,就是 string 型別佔幾個位元組。首先,我寫了一段測試 如...