代码之家  ›  专栏  ›  技术社区  ›  Shahar Shokrani

颚化符`~`在枚举中使用

  •  -1
  • Shahar Shokrani  · 技术社区  · 8 年前

    Iv'e看看这个 answer

    似乎无法理解这行代码:

    CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
    
    public enum CultureTypes
    {
        NeutralCultures = 1,
        SpecificCultures = 2,
        InstalledWin32Cultures = 4,
        AllCultures = 7,
        UserCustomCulture = 8,
        ReplacementCultures = 16,
        [Obsolete("This value has been deprecated.  Please use other values in CultureTypes.")]
        WindowsOnlyCultures = 32,
        [Obsolete("This value has been deprecated.  Please use other values in CultureTypes.")]
        FrameworkCultures = 64,
    }
    

    CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures | 
    CultureTypes.NeutralCultures | 
    CultureTypes.SpecificCultures | 
    CultureTypes.InstalledWin32Cultures | 
    CultureTypes.UserCustomCulture | 
    CultureTypes.ReplacementCultures );
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Federico Dipuma    8 年前

    此表达式:

    CultureTypes.AllCultures & ~CultureTypes.NeutralCultures
    

    等同于(自然语言)“除中立文化外的所有文化”。

    ~ 将否定 CultureTypes.NeutralCultures .

    AllCultures            = 0111 // 1+2+4=7
    NeutralCultures        = 0001 // 1
    SpecificCultures       = 0010 // 2
    InstalledWin32Cultures = 0100 // 4
    

    因此:

    ~NeutralCultures = 1110 // bits flipped
    

    以及:

    AllCultures & ~NeutralCultures = 0111 & 1110
    

    这导致:

    0111
    1110
    ----
    0110
    

    0110 SpecificCultures | InstalledWin32Cultures

        2
  •  2
  •   w0051977    8 年前

    ~是按位补码运算符,如下所述: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/bitwise-complement-operator

    请参阅Luceros在Odeds下对这个问题的回答: Why not all countries are presented in CultureInfo.GetCultures()? ,这解释了位补码运算符用于声明不应在表达式的结果中使用中性区域性。