c#设置或者获取一个泛型整数指定bit的值

ops/2024/9/24 10:17:21/

1.设置

代码如下(示例):

		/// <summary>/// 设置一个整形数的每一个bit的值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="flag">bit位0或者1</param>/// <param name="num">需要改变的数</param>/// <param name="offset">从右往左第几位,从0开始</param>/// <returns></returns>T Changebit<T>(bool flag, T num, int offset) where T : struct{// 确保 T 是一种整数类型int len = 0;if (_data is uint ){len = sizeof(uint) * 8;}else if (_data is int){len = sizeof(int) * 8;}else if (_data is long){len = sizeof(long) * 8;}else if (_data is ulong){len = sizeof(ulong) * 8;}else if (_data is short){len = sizeof(short) * 8;}else if (_data is ushort){len = sizeof(ushort) * 8;}else if (_data is byte){len = sizeof(byte) * 8;}else{throw new InvalidOperationException("Only integer types are supported.");}if (index > len || index < 0)throw new InvalidOperationException("Length too long.");// 将 T 转换为整数,以便进行位操作dynamic value = num;// 创建一个掩码,指定偏移量位置int mask = 1 << offset;if (flag){// 如果 flag 为真,设置相应位置的位value |= mask;}else{// 如果 flag 为假,清除相应位置的位value &= ~mask;}// 返回处理后的结果return (T)value;}

2.get每一个bit位

代码如下(示例):

bool GetIntBit<T>(T _data, int index){int len = 0;if (_data is uint){len = sizeof(uint) * 8;}else if (_data is int){len = sizeof(int) * 8;}else if (_data is long){len = sizeof(long) * 8;}else if (_data is ulong){len = sizeof(ulong) * 8;}else if (_data is short){len = sizeof(short) * 8;}else if (_data is ushort){len = sizeof(ushort) * 8;}else if (_data is byte){len = sizeof(byte) * 8;}else{throw new InvalidOperationException("Only integer types are supported.");}if (index > len || index < 0){throw new ArgumentOutOfRangeException();}dynamic b = _data;return (b & (1 << index)) != 0;}

http://www.ppmy.cn/ops/38421.html

相关文章

<网络安全>《82 微课堂<安全产品微简介(2)>》

2 简单的了解复杂的安全产品 产品说明漏洞扫描或挖掘漏洞扫描和挖掘都是为了发现系统或软件漏洞。区别是挖掘要发现0day漏洞&#xff0c;漏洞扫描发现已知漏洞。准入主要是对合规设备入网进行验证。上网行为管理关注用户网络访问的行为&#xff0c;比如是否泄密、占用带宽过大…

【备战软考(嵌入式系统设计师)】07 - 计算机网络模型

七层模型 计算机网络中比较常见的有OSI七层模型和TCP/IP四层模型。 软考中主要考七层模型&#xff0c;但是实际中使用的还是四层模型比较多&#xff0c;我们主要是为了考试&#xff0c;那就主要讲讲七层模型。不过实际上四层模型就是将七层模型压缩了三层&#xff0c;本质上是…

学习笔记:【QC】Android Q - IMS 模块

一、IMS init 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 二、IMS turnon 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 三、分析说明 1、nv702870 不创建ims apn pdp 2、nv702811 nv702811的时候才创建…

TMS320F280049 CLB模块--总览(0)

CLB模块是可配置的逻辑块&#xff0c;和FPGA的CLB有些不同。 下图是CLB模块在系统中的交互&#xff0c;图中CLB XBAR和TILE是CLB。从049中有4个CLB&#xff0c;也就是TILE1-4。 下图是CPU和CLB交互的示意图。 下图是CLB的时钟。 参考文档&#xff1a; TMS320F28004x Real-Tim…

查看pytorch与cuda对应版本

查看cuda版本 打开cmd,输入nvidia-smi&#xff0c;即可可以看到cuda的版本了 2. pytorch与cuda版本对应关系 可以参考这篇文章&#xff0c;写的非常详细&#xff1a;https://blog.csdn.net/FL1768317420/article/details/134769203

数据结构的堆(c语言版)

一.堆的概念 1.堆的基本概念 在计算机科学中&#xff0c;堆是一种特殊的数据结构&#xff0c;通常用于实现优先队列和动态分配内存。 2.堆的特征 堆是一个完全二叉树&#xff0c;它具有以下两个主要特性&#xff1a; 堆序性&#xff1a;对于最大堆&#xff0c;在堆中的任意节…

攻略:ChatGPT3.5~4.0(中文版)国内无限制免费版(附网址)【2024年5月最新更新】

一、什么是ChatGPT&#xff1f; 1、ChatGPT的全名是Chat Generative Pre-trained Transformer&#xff0c;其中"chat"表示聊天。"GPT"则是由三部分组成&#xff1a;生成式&#xff08;generative&#xff09;意味着具有创造力&#xff1b;预训练&#xff0…

武汉星起航:成功挂牌上股交,优势尽显启新程,共绘创业投资梦

在金秋十月的尾声&#xff0c;武汉星起航电子商务有限公司迎来了一个重要的历史时刻——于2023年10月30日在上海股权托管交易中心成功挂牌展示&#xff0c;正式登陆资本市场。这一里程碑式的跨越&#xff0c;不仅标志着武汉星起航在跨境电商领域的卓越实力&#xff0c;更彰显了…