Cjava
32位機 | 64位機 | |
char | 1 | 1 |
int |
4 | 4 |
long |
4 | 8 |
float | 4 | 4 |
double | 8 | 8 |
char * | 4 | 8 |
2、C++spa
int型字長問題:操作系統
① C/C++規定int字長和機器字長相同;指針
② 操做系統字長和機器字長未必一致;code
③ 編譯器根據操做系統字長來定義int字長;orm
由上面三點可知,在一些沒有操做系統的嵌入式計算機系統上,int的長度與處理器字長一致;有操做unicode
系統時,操做系統的字長與處理器的字長不必定一致,此時編譯器根據操做系統的字長來定義int字長:"編譯器
好比你在64位機器上運行DOS16系統,那麼全部for dos16的C/C++編譯器中int都是16位的;在64位機器上虛擬機
運行win32系統,那麼全部for win32的C/C++編譯器中int都是32位的"string
常見基本類型的字節大小
32位操做系統
char :1個字節(固定)
*(即指針變量): 4個字節(32位機的尋址空間是4個字節。同理64位編譯器)(變化*)
short int : 2個字節(固定)
int: 4個字節(固定)
unsigned int : 4個字節(固定)
float: 4個字節(固定)
double: 8個字節(固定)
long: 4個字節
unsigned long: 4個字節(變化*,其實就是尋址控件的地址長度數值)
long long: 8個字節(固定)
64位操做系統
char :1個字節(固定)
*(即指針變量): 8個字節
short int : 2個字節(固定)
int: 4個字節(固定)
unsigned int : 4個字節(固定)
float: 4個字節(固定)
double: 8個字節(固定)
long: 8個字節
unsigned long: 8個字節(變化*其實就是尋址控件的地址長度數值)
long long: 8個字節(固定)
除了*與long隨操做系統子長變化而變化外,其餘的都固定不變(32位和64相比)
bool 1個字節 char 1個字節 int 4個字節 float 4個字節 doubl 8個字節 long long 8個字節
java
1.在C++中,char是基礎數據類型,8位,1個字節。byte不是基礎數據類型,通常是typedef unsigned char byte;這樣子的,也就是說,byte實際上是unsigned char類型,那麼也是8位,1個字節。不一樣的是,char能夠表示的範圍是-128-127,而byte能夠表示的範圍是0-255。
2.在Java中
在java中,char和byte都是基礎數據類型,其中的byte和C++中的char類型是同樣的,8位,1個字節,-128-127。可是,char類型,是16位,2個字節,'\u0000'-'\uFFFF'。
爲何java裏的char是2個字節?
3.由於java內部都是用unicode的,因此java實際上是支持中文變量名的,好比string 世界 = "個人世界";這樣的語句是能夠經過的。
4.補充:
C++中,某些數據佔多少位,多少字節,是與機器操做系統,硬件,有關係的。
而java中,是與操做系統,硬件無關的,由於java是運行在虛擬機上的,因此數據大小都是固定的。
java中的long是固定8字節,64位;int是4字節,32位