在定义int类型的变量时,使用十六进制表示有什么好处?

发布于 2022-09-01 11:58:37 字数 322 浏览 13 评论 0

最近我在看android源码的时候,发现它里面有很多static final int类型的常量都是使用十六进制来表示的:
图片描述
所以我想问一下,在代码里,使用十六进制和十进制来表示整数有什么区别?或者说,相对十进制,使用十六进制来表示整数有什么好处?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

去了角落 2022-09-08 11:58:37

使用十六进制有几个好处,如:

  1. 方便看出位置对应的共同特征,如你截图中的MODE_WORLD_READABLE和 MODE_WORLD_WRITABLE的前三位都是0(十六进制),如果使用十进制的数字,这样的表示并不明显

  2. 使用十六进制(可以快速一一对应于二进制),方便进行bit mask运算,如移位,或者OR来推算得出一个组合的标识flag。

stackoverflow传送门:http://stackoverflow.com/questions/10920432/why-use-hexadecimal-consta...

御弟哥哥 2022-09-08 11:58:37

个人猜测,是为了让位运算更加直观。Android源码中用到了很多的位运算,相对于10进制,16进制更加直观易懂。

木緿 2022-09-08 11:58:37

以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进制的话,计算哪一位表示哪一个变量会麻烦一些,看起来也很蛋疼

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文