1.CPU位數=CPU中寄存器的位數=CPU能夠一次並行處理的數據寬度(位數)=數據總線寬度; //現在的計算機處理器一般都是64位,這是硬件的事。
2.CPU為了實現其功能設計了指令集,即是CPU的全部指令,這是機器語言。計算機的所有功能都是基於CPU的指令集。指令集和CPU的位數是有聯系的。如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,這是為了向上兼容。有64位CPU上運行32位操作系統、32位CPU上運行16位操作系統的情況,也是為了向上兼容。
3.操作系統位數 = 其所依賴的指令集位數 <= CPU位數
4.計算機字長(機器字長)取決於數據總線的寬度,通常就是CPU一次能處理的數據的位數(CPU位數)。像平時我們買電腦說的64位的處理器,指的就是字長為64的CPU。至於裝32位還是64位的系統,隨便。
5./*以下經WinXP和Win7 64位系統測試,應該跟系統沒關系,而是跟CPU位數、或者編譯器有關系,我用的是vs2008,我這兩台電腦都是64位CPU,所以結果是一樣的,但我還是試了試,果然是一樣的,同一類型的有符號和無符號長度一樣,只不過值的范圍不一樣*/
bool=1字節;
char=1字節;//signed可省略(-2^7~2^7-1),unsigned不可省略(0~2^8-1)
short=2字節;//指int的short,int可省略,signed可省略(-2^15~2^15-1),unsigned不可省略(0~2^16-1)
int=4字節;//signed可省略(-2^31~2^31-1),unsigned不可省略(0~2^32-1)
long=4字節;//指int的long,int可省略,signed可省略(-2^31~2^31-1),unsigned不可省略(0~2^32-1)
float=4字節;
double=8字節;
6.總結: 在標准c++中,int的定義長度要依靠你的機器的字長,也就是說,如果你的機器是32位的,int的長度為32位,如果你的機器是64位的,那么int的標准長度就是64位,比如16位機上,sizeof(int)=2,而32位機上sizeof(int) = 4;32位機上sizeof(long) = 4,而64位機上sizeof(long) = 8。 但是在32位機器和64機器中int類型都占用4個字節,因為一般編譯器可以根據自身硬件來選擇合適的大小,但是需要滿足約束:short和int型至少為16位,long型至少為32位,並且short型長度不能超過int型,而int型不能超過long型(C++沒有規定每個類型必須要占多少字節,而是規定了最少占多少等約束)。這即是說各個類型的變量長度是由編譯器和硬件來決定的,而當前主流的編譯器中一般是32位機器和64位機器中int型都是4個字節(例如,GCC)。
