int型變數佔多少個位元組

2021-09-07 21:14:11 字數 1288 閱讀 6873

引自

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型變數佔多少個位元組

引自 int型變數有時候佔4個位元組 在win32 有時候佔2個位元組 在dos 這個int型別的大小到底是跟編譯器有關,還是跟cpu有關,還是跟作業系統有關?所謂的16位32位64位系統是由cpu決定的,由機器指令的定址 暫存器位數決定的 os受cpu的限制,但在32位的cpu下16位的os也可以...

Oracle中漢字到底佔多少個位元組

之前本人認為乙個漢字都是佔兩個位元組的,mssql server如此 至少在我的理解範圍之內,如果有誤還請大家糾正 但是最近在使用oracle資料庫,發現了一些特殊的東西,那就是,當你用兩個函式 分別是length和lengthb,這兩個函式到底是幹什麼用的,我想不需要我說明,大家查幫助就可以了 進...

int佔幾個位元組

int型變數有時候佔4個位元組 在win32 有時候佔2個位元組 在dos 這個int型別的大小到底是跟編譯器有關,還是跟cpu有關,還是跟作業系統有關?所謂的16位32位64位系統是由cpu決定的,由機器指令的定址 暫存器位數決定的 os受cpu的限制,但在32位的cpu下16位的os也可以跑 就...