当前位置: 首页 > news >正文

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#之枚举中的按位与()按位或(|)。

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

Blazor前后端框架Known-V1.2.12

V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…...

bug记录:微信小程序 给button使用all: initial重置样式

场景:通过uniapp开发微信小程序 ,使用uview的u-popup弹窗,里面内嵌了一个原生button标签,因为微信小程序的button是有默认样式的,所以通过all: initial重置样式 。但是整个弹窗的点击事件都会被button上面的点击事件覆…...

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换(pix2pix)

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Image-to-Image Translation with Conditional Adversarial Networks 链接:Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…...

[时序数据库]:InfluxDB进阶

文章目录 1 摘要2 背景2.1 问题一:针对Influx V2.0工具2.2 问题二:针对Influx查询语言 3 需求分析4 快速入门4.1 客户端驱动版本选择4.2 连接influx4.2.1 influx配置信息4.2.2 influx连接配置4.2.3 测试连通情况 5 Influx工具类5.1 InfluxQL工具类5.1.1 …...

uniapp编写微信小程序遇到的坑总结

1、阻止事件冒泡 使用uniapp开发微信小程序的时候,发现使用click.stop来阻止事件冒泡没有作用,点击了之后发现仍然会触发父组件或者祖先组件的事件。 在网上查阅,发现使用tap.stop才能阻止事件冒泡。 2、二维码生成 在网上找了很多&…...

Binary operator ‘*‘ cannot be applied to two ‘Double?‘ operands

在 swift 中声明 Double 类型参数变量在进行运算处理时抛出了如下异常 Binary operator * cannot be applied to two Double? operands 情况一 参数类型不匹配,需将参数类型进行匹配 self.max height / (length * width) // 初始 self.max height / (length * Double(wid…...

C#如何打包EXE程序生成setup安装文件

项目结束之后,有需要将winForm程序打包成.exe文件提供给用户。 这里记录一下打包过程。 1:首先获取打包插件,如果你的VS已经安装,忽略此步骤。 点击 工具->扩展和更新,选择联机,搜索installer&#x…...

【python实现向日葵控制软件功能】手机远程控制电脑

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人_python人工智能视觉(opencv)从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了: https://blog.csdn.net/lbcy…...

手机系统录屏怎么录?有什么其他录制方法和注意事项?

手机系统录屏是一种很方便的方式,可以用于录制游戏、教程视频,或者是跟别人分享一些操作。在不同的手机系统中,录制方法可能会有所不同,以下是一些通用的步骤分享以及其他录制工具的分享,有需要的小伙伴们快来看一看吧…...

记录一个编译TubeTK时的报错:at_check问题

在使用如下命令安装TubeTK的cuda_nms时,报了一个错误,记录一下这个错误和解决办法 (base) redmeryredmery:~/Desktop/MOT/TubeTK/post_processing/nms$ python setup.py build_ext --inplace因为这个命令是在/home/redmery/Desktop/MOT/TubeTK/install/…...

k8s v1.27.4二进制部署记录

记录二进制部署过程 #!/bin/bash#升级内核 update_kernel() {rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgyum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmyum --disablerepo"*" --enablerepo"elrepo-kernel&q…...

C# API 文档注释规范

C# API 文档注释规范 1. 命名空间注释(namespace)2. summary3. remarks and para4. param5. returns6. example and code7. exception8. typeparam 最近在开发工作中需要实现 API 帮助文档,如果根据所写的代码直接重写 API 帮助文档将会是意见非常大的工作量&#x…...

分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测

分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测 目录 分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 Matlab实现分类预测 | Matlab实现基于TSOA-CNN-GRU-Attention的数据分类预…...

《深度剖析K8s》学习笔记

一、容器技术 1.从进程说起 a. 概述 进程:数据和状态的综合 容器技术的核心:约束和修改进程的动态表现,创造出边界(Cgroup:约束/namespace:进程视图) 启动容器例子: docker ru…...

神经网络基础-神经网络补充概念-49-adam优化算法

概念 Adam(Adaptive Moment Estimation)是一种优化算法,结合了动量梯度下降法和RMSProp的优点,用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用,通常能够加速收敛并提高模型性能…...

Java:正则表达式书写规则及相关案例:检验QQ号码,校验手机号码,邮箱格式,当前时间

正则表达式 目标:体验一下使用正则表达式来校验数据格式的合法性。需求:校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头 首先用自己编写的程序判断QQ号码是否正确 public static void main(String[] args) {Sy…...

图数据库_Neo4j_Centos7.9安装Neo4j社区版3.5.4_基于jdk1.8---Neo4j图数据库工作笔记0011

首先上传安装包,到opt/soft目录 然后看一下jdk安装的是什么版本的,因为在neo4j 4以后就必须要用jdk11 以上的版本,我这里还用着jdk1.8 所以 我这里用3.5.4的版本 关于下载地址: https://dist.neo4j.org/neo4j-community-3.5.4-unix.tar.gz 然后再去解压到/opt/module目录下 …...

使用Rust编写的一款使用遗传算法、神经网络、WASM技术的模拟生物进化的程序

模拟生物进化程序 Github地址:FishLife 期待各位的star✨✨✨ 本项目是一个模拟生物进化的程序,利用遗传算法、神经网络技术对鱼的眼睛和大脑进行模拟。该项目是使用 Rust 语言编写的,并编译为 WebAssembly (Wasm) 格式,使其可以…...

UE4/UE5 “无法双击打开.uproject 点击无反应“解决

一、方法一:运行UnrealVersionSelector.exe 1.找到Epic Game Lancher的安装目录, 在lancher->Engine->Binaries->Win64->UnrealVersionSelector.exe 2.把UnrealVersionSelector.exe 分别拷贝到UE4 不同版本引擎的 Engine->Binaries->…...

Live2D资源解析技术解析与实战:从格式障碍到跨领域应用

Live2D资源解析技术解析与实战:从格式障碍到跨领域应用 【免费下载链接】AzurLaneLive2DExtract OBSOLETE - see readme / 碧蓝航线Live2D提取 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneLive2DExtract 一、诊断资源解析障碍 1.1 识别技术痛点&…...

【20年Cython+PyO3专家亲授】:绕过GIL的Python扩展中87%并发崩溃的底层内存模型误用解析

第一章:Python无锁GIL环境下的并发模型报错解决方法Python 的全局解释器锁(GIL)本质上限制了多线程在 CPU 密集型任务中的真正并行性。然而,随着 PyPy、Jython、Cython 以及实验性无 GIL CPython 分支(如 PEP 703 提案…...

一键部署体验:圣女司幼幽-造相Z-Turbo文生图模型效果实测

一键部署体验:圣女司幼幽-造相Z-Turbo文生图模型效果实测 1. 模型简介与部署准备 圣女司幼幽-造相Z-Turbo是一款基于Z-Image-Turbo模型的LoRA微调版本,专门用于生成《牧神记》中角色"圣女司幼幽"的高质量图像。该模型通过Xinference框架部署…...

操作系统原理与LiuJuan20260223Zimage性能优化深度解析

操作系统原理与LiuJuan20260223Zimage性能优化深度解析 1. 引言 在AI模型部署和推理过程中,很多人只关注算法本身的优化,却忽略了底层操作系统对性能的关键影响。实际上,操作系统的资源管理策略、内存分配机制和进程调度方式,直…...

OpenClaw故障自愈方案:百川2-13B模型异常日志分析与重试机制

OpenClaw故障自愈方案:百川2-13B模型异常日志分析与重试机制 1. 问题背景与需求场景 上周我在用OpenClaw对接百川2-13B模型处理夜间自动化任务时,遇到了一个典型问题:凌晨3点突然收到飞书告警,显示"模型响应超时"。当…...

RTX4090D大模型推理专用镜像体验:Qwen-Image预装环境,一键启动图文对话

RTX4090D大模型推理专用镜像体验:Qwen-Image预装环境,一键启动图文对话 1. 镜像概述与核心优势 1.1 为什么选择专用镜像 在本地部署大语言模型时,环境配置往往是最耗时的环节。以Qwen-VL这样的视觉语言模型为例,需要处理CUDA版…...

SeqGPT-560M部署避坑:常见‘加载中’卡顿、端口冲突、GPU未识别解决

SeqGPT-560M部署避坑:常见‘加载中’卡顿、端口冲突、GPU未识别解决 1. 模型简介与核心价值 SeqGPT-560M是阿里达摩院推出的零样本文本理解模型,这个560M参数量的轻量级模型专门针对中文场景优化,无需训练就能直接处理文本分类和信息抽取任…...

Taho移动端展望:社区钱包的未来发展路线图

Taho移动端展望:社区钱包的未来发展路线图 【免费下载链接】extension Taho, the community owned and operated Web3 wallet. 项目地址: https://gitcode.com/gh_mirrors/ex/extension Taho作为社区拥有和运营的Web3钱包,正在重新定义去中心化金…...

Go Routine 调度器架构分析

Go Routine调度器架构分析 Go语言凭借其轻量级的并发模型在开发者中广受欢迎,而Go Routine调度器正是这一模型的核心。它高效地管理成千上万的协程,确保它们在有限的系统线程上合理运行。本文将深入分析Go Routine调度器的架构设计,帮助读者…...

5分钟搞定foobar2000美化:foobox-cn让你的音乐播放器焕然一新!

5分钟搞定foobar2000美化:foobox-cn让你的音乐播放器焕然一新! 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 厌倦了千篇一律的音乐播放器界面?想让你的foobar200…...