C#之枚举中的按位与(&)按位或(|)。

这篇具有很好参考价值的文章主要介绍了C#之枚举中的按位与(&)按位或(|)。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一些基础定义:

按位或运算符(|)是一种位运算符,用来对两个二进制数进行操作。对于每个位上的1,如果至少有一个二进制数中的对应位为1,则结果为1;否则,结果为0
按位与运算符(&)是一种位运算符,用来对两个二进制数进行操作。对于每个位上的1,如果两个二进制数中的对应位为1,则结果为1;否则,结果为0

先看代码:

[Flags]
public enum Seasons
{
    None = 0,
    Summer = 1,
    Autumn = 2,
    Winter = 4,
    Spring = 8,
    All = Summer | Autumn | Winter | Spring
}


 //枚举


        var spring = Seasons.Spring;
        var startingOnEquinox = Seasons.Spring | Seasons.Autumn;
        var theYear = Seasons.All;


        if (spring.HasFlag(Seasons.Spring)) Console.WriteLine("春天来了");

        if (theYear.HasFlag(Seasons.Winter)) Console.WriteLine("冬天来了");
        if (startingOnEquinox.HasFlag(Seasons.Autumn)) Console.WriteLine("秋天来了");
		Console.WriteLine("C#牛皮。C#接单QQ群 452760896");

这是一个表示季节的枚举,主要看最后一个ALL 他表示上面所有季节的枚举。
很多人有时候会不知所以然。
今天详细解释下:
为什么ALL包含上面所有的季节选项,我们通过二进制计算下。

当使用位运算符按位或(|)将枚举常数的值进行操作时,它的原理是将各个二进制位对应的数值进行合并。对于每个位上的1,如果至少有一个枚举常数中对应位为1,则结果为1;否则,结果为0。

假设一个枚举类型中有4个枚举常数如下: Summer: 0001 Autumn: 0010 Winter: 0100 Spring: 1000

按位或操作的结果为: 0001 | 0010 | 0100 | 1000 = 1111

得到了二进制数1111,转换为十进制数即为15。所以,All枚举常数的值为15,表示All代表所有的季节,包括Summer,Autumn,Winter和Spring。

这种按位或运算的机制可以将多个二进制数的对应位合并起来,以获得一个包含多个选项的组合值。在使用枚举时,可以通过进行按位与运算(&)来判断一个特定的选项是否包含在枚举常数中。如果按位与运算的结果不为0,则表示包含在其中;否则,表示不包含。

计算的结果为ALL15对应的二进制为:1111
又因为HasFlag这个方法底层其实是在进行按位与(&)计算,判断当前值为不为0如果是0就返回false
比如这句代码:if (theYear.HasFlag(Seasons.Winter)) Console.WriteLine("冬天来了");
theYear表示的二进制是1111
Seasons.Winter表示的二进制是0100 他俩按位与返回的值是0100也就是Seasons.Winter自己。所以返回True

这里强调下,如果要用按位与或者或请一定要让有效值是2的次方。因为是二进制嘛。
[Flags] 是一个特性(Attribute),用于标记枚举类型支持按位组合的选项。

当在枚举类型上应用 [Flags] 特性时,它告诉编译器该枚举类型的值可以进行按位组合。这样一来,可以使用按位或操作符(|)将多个枚举常数的值组合成一个新的枚举值。

在上面的示例中,使用 [Flags] 特性修饰了 Seasons 枚举类型。这表示枚举类型 Seasons 的值可以进行按位组合。

当使用 [Flags] 特性时,建议为枚举类型指定具有特殊含义的值,如 None 和 All,以及按位组合的其它枚举常数。

运行结果:
C#之枚举中的按位与(&)按位或(|)。,c#文章来源地址https://www.toymoban.com/news/detail-654258.html

到了这里,关于C#之枚举中的按位与(&)按位或(|)。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#,二进制数的按位旋转(Bits Rotate)算法与源代码

    二进制数的按位旋转(翻转)是编程中常见的按位运算方法。 二进制数的按位旋转分为左转、右转。 左转意味着数据变大,右转意味着数据变小(有损)。 using System; using System.Text; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer.Algorithm {     public static

    2024年02月19日
    浏览(40)
  • 【教3妹学编程-算法题】检查按位或是否存在尾随零

    3妹 :呜呜,烦死了, 脸上长了一个痘 2哥 : 不要在意这些细节嘛,不用管它,过两天自然不就好了。 3妹 :切,你不懂,影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊, 工作那么辛苦,哪还有时间想这些啊。 3妹 :说到找工作,我又要去刷题了。 2哥 :我给你出

    2024年01月20日
    浏览(45)
  • C# 中的“智能枚举”:如何在枚举中增加行为

    枚举的基本用法回顾 枚举常见的设计模式运用 介绍 智能枚举 代码示例 业务应用 小结 以下是一个常见的 C# 枚举( enum )的示例: 在这个示例中,我们定义了一个名为 Weekday 的枚举,其中包括每个星期的日子。然后在 Main 方法中,我们将 today 变量设置为 Tuesday ,并使用 T

    2024年02月04日
    浏览(34)
  • 从 C# 中的枚举中获取 int 值

    我有一个名为 Questions (复数)的课程。在这个类中有一个名为 Question(单数)的枚举,看起来像这样。 在 Questions 类中,我有一个 get(int foo) 函数,它为该 foo 返回一个 Questions 对象。有没有一种简单的方法可以从枚举中获取整数值,以便我可以执行类似 Questions.Get(Question.R

    2024年02月11日
    浏览(33)
  • C# 枚举和集合练习

    Lumberjack.cs类: Main方法: Card.cs类: Suits集合: Values集合: CardComparerByValue.cs Main方法: RetiredPlayer.cs类: Main方法: Breeds.cs: Dog.cs: Main方法: Duck.cs类: DuckComparer.cs DuckComparerByKind.cs DuckComparerBySize.cs Program.cs

    2024年02月09日
    浏览(40)
  • Unity C# 枚举多选

    2024年02月02日
    浏览(28)
  • 如何在 C# 中将 int 转换为枚举?

    如何在 C# 中将 int 强制转换为 enum? huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。 从一个整数: 从一个字符串: 从一个数字: @FlySwat,如果 YourEnum 是动态的并且只会在运行时知道,而我想要转换为 Enu

    2024年02月01日
    浏览(51)
  • C# 错误: 集合已修改,可能无法执行枚举操作

    出错原因是使用了RemoveAt()函数移除了数据中的某一个数,导致数据发生了错位(参考链接一) 解决方案: 第一种解决方法:使用for循环 第二种解决方法:调用ToArray()方法,然后再进行foreach循环 参考链接: 链接一:[C#]集合已修改;可能无法执行枚举操作 - wolfy - 博客园 (

    2024年01月15日
    浏览(35)
  • C# 枚举使用整理_C# enum详解

    一、枚举的定义 枚举类型 是由基础 整型数值类型 的一组命名常量定义的 值类型 。 System.Enum 类型是所有枚举类型的抽象基类。 它提供多种方法来获取有关枚举类型及其值的信息。 有关更多信息和示例,请参阅 System.Enum API 参考页。 可在基类约束中使用 System.Enum(称为枚举

    2024年02月16日
    浏览(31)
  • C#,入门教程(66)——枚举Enum的高等用法

    前言:国内码农与国外优秀程序员的最大区别是,我们的专家、教授喜欢唾沫横飞地,夸夸其谈语言特性、框架、性能,唯一目的是带私货(书籍或教程),很少能写出真有用的程序。差距在哪呢?基础!基础!基础! 枚举enum是常用的数据类型,有很多优点。 枚举使用过程

    2024年01月17日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包