代码之家  ›  专栏  ›  技术社区  ›  kitsune

十六进制表示法和有符号整数

  •  11
  • kitsune  · 技术社区  · 16 年前

    这是一个 follow up question two's-complements

    int ALPHA_MASK = 0xff000000;
    

    在C#中,这需要使用无符号整数, uint ,因为它解释为 4278190080 -16777216 .

    3 回复  |  直到 6 年前
        1
  •  25
  •   jww avp    7 年前

    C#(而不是.NET)也使用了这两种类型的补码,但它同时支持有符号和无符号类型(Java不支持)。位掩码更自然地是一种无符号的东西——为什么一位与所有其他位不同?

    在这种特定情况下,可以安全地使用未经检查的强制转换:

    int ALPHA_MASK = unchecked((int)0xFF000000);
    

    int ALPHA_MASK = -0x1000000; // == -16777216
    

    十六进制与十进制没有(或不应该)任何不同:要表示负数,需要写一个负号,后跟表示绝对值的数字。

        2
  •  7
  •   Marc Gravell    16 年前

    您可以使用未选中的块和强制转换:

    unchecked
    {
        int ALPHA_MASK = (int)0xff000000;
    }
    

    int ALPHA_MASK = unchecked((int)0xff000000);
    

    虽然不是很方便。。。也许只是使用一个文本整数?

        3
  •  0
  •   jww avp    7 年前

    雪上加霜的是,这也会起作用:

    -0x7F000000