java - 在定义int类型的变量时,使用十六进制表示有什么好处?
PHP中文网
PHP中文网 2017-04-17 13:54:33
0
3
1483

最近我在看android源码的时候,发现它里面有很多static final int类型的常量都是使用十六进制来表示的:

所以我想问一下,在代码里,使用十六进制和十进制来表示整数有什么区别?或者说,相对十进制,使用十六进制来表示整数有什么好处?

另外,我还发现,在定义常量的时候,他们并不是随便的拿一个十六进制数来赋值的,它取的值里面一般都会包含1、2、4、8这几个数字,这里面又有什么巧妙之处?

PHP中文网
PHP中文网

认证0级讲师

全部回覆(3)
伊谢尔伦

使用十六進位有幾個好處,如:

  1. 方便看出位置對應的共同特徵,如你截圖中的MODE_WORLD_READABLE和MODE_WORLD_WRITABLE的前三位都是0(十六進位),如果使用十進制的數字,這樣的表示並不明顯

  2. 使用十六進位(可以快速一一對應於二進位),方便進行bit mask運算,如移位,或者OR來推算得出一個組合的標識flag。

stackoverflow傳送門:http://stackoverflow.com/questions/10920432/why-use-hexadecimal-consta...

巴扎黑

個人猜測,是為了讓位元運算更直覺。 Android原始碼中用到了很多的位元運算,相對於10進制,16進制更直觀易懂。

Ty80

以ViewGroup源碼為例:

    static final int FLAG_CLIP_CHILDREN = 0x1;
    private static final int FLAG_CLIP_TO_PADDING = 0x2;
    static final int FLAG_INVALIDATE_REQUIRED  = 0x4;
    private static final int FLAG_RUN_ANIMATION = 0x8;
    static final int FLAG_ANIMATION_DONE = 0x10;
    private static final int FLAG_PADDING_NOT_NULL = 0x20;
    private static final int FLAG_ANIMATION_CACHE = 0x40;
    static final int FLAG_OPTIMIZE_INVALIDATE = 0x80;
    static final int FLAG_CLEAR_TRANSFORMATION = 0x100;

然後所有以上屬性一起用一個int變數mGroupFlags標示,每一位記錄一個屬性的狀態(0或1)

用16進位比較直覺 你可以直接心算出來

第0位表示FLAG_CLIP_CHILDREN
第1位表示FLAG_CLIP_TO_PADDING
第2位表示FLAG_INVALIDATE_REQUIRED
第3位表示FLAG_RUN_ANIMATION
第4位表示FLAG_ANIMATION_DONE
....
....

寫成10進制的話,計算哪一位表示哪一個變數會麻煩一些,看起來也很蛋疼

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板