從計算機的數值表示上講,0x開頭的其實並不是所謂顏色代碼的表示方法,而是16進制數的標准寫法,譬如0xA就是十進制的10。而#開頭的六(或三)位十六進制數是在設計領域(如CSS以及一些繪圖軟件)中顏色代碼的表示方法。
如果我們只考慮24位顏色的話,電腦中每個像素的顏色其實就是用3個字節(24位)的無符號整數來存儲的。所以用0x開頭的“顏色代碼”,也就是這個十六進制數表示的數值,其實就是顏色在內存(顯存)中的存儲方式。
不采用常見的10進制數而要采用0x開頭的16進制數來表示顏色的原因:
在顏色這3個字節中,大家規定17-24位表示紅色的分量,9-16位表示綠色的分量,1-8位表示藍色的分量,因此一個十進制數16777215表示的顏色很難給我們一個直觀的感覺,而將它轉換成16進制數0xFFFFFF我們就可以很輕易的看出前兩位FF表示紅色,中間兩位FF表示綠色,后面兩位FF表示藍色,這個數值表示白色。
於是就出現了在設計領域使用#開頭的6位十六進制數來表示顏色的方式,既直觀又可以方便地在內存中進行轉換與存儲。
結論:
#開頭的六位十六進制數僅僅表示顏色
0x開頭的數字表示包括顏色在內的一般數值。
注意:
1.在十進制中0123和123是相等的兩個數字,所以0x000FFF和0xFFF是相等的兩個數值,也就表示相同的兩個顏色。但是,注意但是,#000FFF和#FFF表示的卻是兩個不同的顏色。
2.在CSS(以及部分繪圖軟件中)#后面跟3個十六進制數是被允許的,比如#ABC表示的顏色和#AABBCC表示的顏色相同。(竟然Android面試會碰到這種問題)