为什么声明常量时候用十六进制? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thisnull
V2EX    Java

为什么声明常量时候用十六进制?

  •  
  •   thisnull 2014-10-13 09:20:47 +08:00 8127 次点击
    这是一个创建于 4023 天前的主题,其中的信息可能已经有所发展或是发生改变。
    private static final int XXXX = 0x00000001;

    RT?谁能解答,难道只是程序员的喜好.
    21 条回复    2014-10-14 05:56:31 +08:00
    holmesabc
        1
    holmesabc  
       2014-10-13 09:23:42 +08:00
    没有这种问题.
    看需求了。
    socket这一类的东西,直接面向byte的,可能就是hex
    其它的一般还是10进制
    sunocean
        2
    sunocean  
       2014-10-13 09:25:45 +08:00
    没什么区别 ,编译器处理后计算机看到的都是二进制。这么写估计在直接操作寄存器,方便阅读和改错。
    fising
        3
    fising  
       2014-10-13 09:33:06 +08:00
    更好的可读性。
    niboy
        4
    niboy  
       2014-10-13 09:37:17 +08:00
    有时候会用到位操作?与或操作标志位方便。0x00000001,0x00000010,0x00000100,这种?
    hekunhotmail
        5
    hekunhotmail  
       2014-10-13 09:47:03 +08:00
    socket 自定义协议时,会更方便。
    hekunhotmail
        6
    hekunhotmail  
       2014-10-13 09:47:36 +08:00
    我指得是表示更直观。
    thisnull
        7
    thisnull  
    OP
       2014-10-13 09:48:37 +08:00
    @niboy 都已经是常量应该不会用位操作吧.
    nybux
        8
    nybux      2014-10-13 09:52:25 +08:00
    如果是属性的话,经常会有or的操作。
    比如什么属性|什么属性
    写成16进制,就很容易辨识位的冲突,或者只标识一个位
    比如0x0100 0x0200 0x0400 0x800,如果见到0x0600,你知道有2位可能写错了
    如果10进制,给你看1536就不清楚里面bit的情况了
    semicircle21
        9
    semicircle21  
       2014-10-13 10:03:51 +08:00   1
    在需要 或操作的时候会这样, 容易看清 究竟哪些位被置位了.
    比如 0x730, 容易用肉眼分辨出 0x400, 0x200, 0x100, 0x020, 0x010 这些位生效了.
    如果给你 0x730 = 1840, 反应不出哪些位被置了.

    如果不需要或操作的情况下, 或者说不是属性的含义, 仅仅是分类的意义, 用 1,2,3,4 也很常见.
    dychenyi
        10
    dychenyi  
       2014-10-13 10:06:14 +08:00 via Android
    定义宏之类的,可以非常容易看出来,有时候属性要与和或,十进制很难算,要么就2进制,不过太长了。
    withrock
        11
    withrock  
       2014-10-13 10:27:17 +08:00
    因为可以把它们组合起来。
    tempask
        12
    tempask  
       2014-10-13 10:42:20 +08:00
    很可能这个常量常用于各种位操作,因此这样声明看起来更加清楚直接,否则你写成10进制,在用的地方看起来会比较费劲
    233
        13
    233  
       2014-10-13 13:29:17 +08:00
    用于位操作吧,尤其驱动相关代码这种情况更多
    A = 0x0001
    B = 0x0002
    C = 0x0004
    D = 0x0008
    jemyzhang
        14
    jemyzhang  
       2014-10-13 13:53:34 +08:00
    肯定是嵌入式C程序员写的,哈哈~硬件操作必须的
    thisnull
        15
    thisnull  
    OP
       2014-10-13 14:02:34 +08:00
    @jemyzhang 这是JAVA 写的
    thisnull
        16
    thisnull  
    OP
       2014-10-13 14:02:54 +08:00
    @233 java写的代码
    eslizn
        17
    eslizn  
       2014-10-13 16:32:53 +08:00
    @thisnull 也难怪你会问这种问题,java就不能位操作了?有些逻辑用位操作实现起来比较简单
    Mutoo
        18
    Mutoo  
       2014-10-13 16:58:20 +08:00
    这没什么,我还喜欢写成这样呢
    A = 1<<0;
    B = 1<<1;
    C = 1<<2;
    D = 1<<3;
    thisnull
        19
    thisnull  
    OP
       2014-10-13 20:52:17 +08:00
    @eslizn 我知道JAVA可以操作位移符, 只是好奇声明常量的时候为何用十六进制的而已.
    eslizn
        20
    eslizn  
       2014-10-13 22:49:29 +08:00
    @thisnull 你不觉得十六进制比十进制直观吗? 0xff 就是一个字节
    WhatIf
        21
    WhatIf  
       2014-10-14 05:56:31 +08:00 via Android
    因为对人脑来说2进制到16进制的互转比2进制到10进制的互转来得直接。你完全可以用10进制来写,但是每次阅读代码还费劲思考也是一个什么值,多累
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2816 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 06:31 PVG 14:31 LAX 23:31 JFK 02:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86