轉自:http://www.xici.net/d77443124.htm
看了很多帖,有關C/C++中16進制數使用的問題很多,在這里開個專題:
1)什么是16進制數?
這個,呵呵,太簡單了吧,飛過
2)為什么在C/C++程序中大量使用16進制數?
我們知道所有的數在計算機中都是以2進制存儲的,例如1000,在內存中就是1111101000,C/C++是比較底層的語言,在程序中有時希望比較直觀的表示內存中數據存儲的真實狀態,所以最好在程序中直接使用2進制來描述數值,這樣你的程序將是:
int a[1111101000];
x=1010101111010010101010;
a[101111011]=x*1010101111010010101010/010100001010101010101111110;
.....
呵呵,崩潰了吧!
所以,程序這樣寫是要人命的,怎么辦呢?用10進制難以反映內存中真實數據存儲狀態,2進制太長,所以有人就想到了16進制:
1010101111010010101010==2AF4AA
16進制比2進制最大的優勢就是短,那短有什么好處?
a.書寫速度快;b.記憶方便;c.寫的少出錯概率自然低;d.減少程序每行長度;
16進制比10進制有哪些優勢呢?
a.2進制和16進制互相轉換簡便,四個2進制位剛好對應一個16進制位;
b.兩位16進制數在內存中存儲剛好占一個字節,我們一看就知道2ab234cd在內存中占用4個字節,如果知道了這個數存放的地址,其中哪個位數存在哪個字節都能一目了然,可以更加直觀反映內存存儲數據、處理數據的實際情況:
c.很多C/C++的程序調試工具默認使用16進制描述數值,尤其在描述各種地址的時候;
d.程序顯得比較高深,呵呵;
3)在C/C++程序中怎么使用16進制數
16進制的整型:
程序中使用16進制的常數,需要用0x開始,以便區別0x1234,1234,前者代表16進制的1234,后者是10進制的1234,0x1234可比1234大多了,注意0x1234等價於0x01234等價於0x000000001234;
16進制的字符型:
字符型只有一個字節,所以賦值給它不能超過2位16進制數,例如有字符型變量如下:
char c=0x5A; //相當於把ASCII碼為0x5A的字符賦值給c;
也可以在單引號中使用轉義字符的時使用16進制:
char c='\x5A'; //相當於把ASCII碼為0x5A的字符賦值給c;注意到了么,使用轉義字符時x前面的0沒了,x后面的0也不能寫!
16進制的浮點型:
沒用過!