首页 > 其他分享 >将字节中的某个位赋值

将字节中的某个位赋值

时间:2025-01-18 12:13:06浏览次数:1  
标签:字节 掩码 按位 设置 offset 某个 赋值 位为

[Description("将字节中的某个位赋值")]
        public static byte SetbitValue(byte value, int offset, bool bitValue)
        {
            return bitValue ? 
                 (byte)(value | (byte)Math.Pow(2, offset)) :
                 (byte)(value & ~(byte)Math.Pow(2, offset));
        }
        /*
            这段代码是一个C#方法,用于设置一个字节(`byte`)中某一位的值。具体来说,它可以根据传入的参数将字节中的某一位设置为1或0。

            ### 参数说明
            - `value`:原始的字节值。
            - `offset`:要设置的位的偏移量(从0开始,0表示最低位,7表示最高位)。
            - `bitValue`:要设置的值,`true`表示将该位设置为1,`false`表示将该位设置为0。

            ### 方法逻辑
            1. **设置位为1**:
               - 使用按位或操作符 `|` 将目标位设置为1。
               - `Math.Pow(2, offset)` 计算出一个掩码,该掩码只有目标位为1,其他位为0。
               - 将原始字节 `value` 与掩码进行按位或操作,结果是将目标位设置为1,其他位保持不变。

            2. **设置位为0**:
               - 使用按位与操作符 `&` 和按位取反操作符 `~` 将目标位设置为0。
               - `Math.Pow(2, offset)` 计算出一个掩码,该掩码只有目标位为1,其他位为0。
               - 对掩码进行按位取反操作,得到一个只有目标位为0,其他位为1的掩码。
               - 将原始字节 `value` 与取反后的掩码进行按位与操作,结果是将目标位设置为0,其他位保持不变。

            ### 
            假设 `value = 0b10101010`(二进制),`offset = 3`,`bitValue = true`:
            - 计算掩码:`Math.Pow(2, 3) = 8`,即 `0b00001000`。
            - 执行按位或操作:`0b10101010 | 0b00001000 = 0b10101010`(结果不变,因为第3位已经是1)。

            如果 `bitValue = false`:
            - 计算掩码:`Math.Pow(2, 3) = 8`,即 `0b00001000`。
            - 取反掩码:`~0b00001000 = 0b11110111`。
            - 执行按位与操作:`0b10101010 & 0b11110111 = 0b10100010`(第3位被设置为0)。

            ### 
            这个方法通过位操作来高效地设置字节中的某一位,适用于需要精确控制字节中每一位的场景,如硬件控制、协议解析等。
                     */

 

标签:字节,掩码,按位,设置,offset,某个,赋值,位为
From: https://www.cnblogs.com/zengpeng/p/18678306

相关文章

  • 2025-01-18:施咒的最大总伤害。用go语言,一个魔法师掌握了多种不同的咒语,每个咒语对应一
    2025-01-18:施咒的最大总伤害。用go语言,一个魔法师掌握了多种不同的咒语,每个咒语对应一个伤害值,这些伤害值存储在数组power中,其中可能会有多个咒语具有相同的伤害值。使用某个特定伤害值为power[i]的咒语后,魔法师不能再使用伤害值为power[i]-2、power[i]-1、power[......
  • 阻塞赋值和非阻塞赋值
    理论学习        阻塞赋值用                =        表示,这种对应的电路结构常常与触发器没有关系,只与输入电平的变化有关系。可以将阻塞赋值的操作看作只有一个步骤的操作,即将计算赋值符号的右边赋值给左边,在未执行完之前,不允......
  • 【CC2640R2F】香瓜CC2640R2F之每30ms发80字节数据
    本文最后修改时间:2022年01月25日10:19一、本节简介本节以simple_peripheral工程为例,介绍CC2640R2F如何使用定时器每30ms,发4个数据包(每个数据20字节),共发送80字节给app。二、实验平台1)CC2640R2F平台①协议栈版本:CC2640R2SDKv1.40.00.45②编译软件:CCS7.3.0.00019③硬......
  • Linux 查看目录下的文件夹命令与 find 查找某个目录但不包括该目录本身
    在Linux系统中,管理和查找文件及文件夹是日常运维和开发过程中常见的任务。本文将介绍如何查看目录下的文件夹,并使用 find 命令查找特定目录下的内容,但排除该目录本身。我们将详细讨论以下内容:使用 ls 命令查看目录下的文件夹。使用 find 命令查找特定目录内容并排除该......
  • SAP-ABAP赋值语句详解及举例
    在ABAP(AdvancedBusinessApplicationProgramming)中,赋值语句用于将一个值或表达式的结果赋给变量。ABAP提供了几种不同的赋值方式,取决于变量的类型和所需的操作。以下是一些常见的赋值语句示例:基本赋值:使用=符号将值赋给变量。DATA:lv_variableTYPEi.lv_variable=......
  • 字节跳动发布开源 Lip Sync AI 模型,视频换声对口型超轻松!
    ByteDance新开源模型LatentSync,视频换声对口型超轻松!阅读时长:9分钟论文地址:https://arxiv.org/pdf/2412.09262发布时间:2025年1月8日字节跳动最近推出了LatentSync,这是一款全新的、最先进的开源视频唇形同步模型。它是一个基于音频条件潜在扩散模型的端到端唇形同步框架。......
  • 在字节跳动干了3年网络安全工程师,30岁即将退休的我,告诉你网络安全的真实就业前景_字节
    前景很多人不知道网络安全发展前景好吗?学习网络安全能做什么?今天为大家解答下先说结论:网络安全的前景必然是超级好的作为一个有丰富Web安全攻防、渗透领域老工程师,之前也写了不少网络安全技术相关的文章,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人私信向我......
  • 宽窄字节3:宽窄字节字符串的转换
    文章目录前言一、为什么要进行转换?二、使用微软提供的API函数实现宽窄字节转换三、使用ATL提供的CA2W、CW2A、CT2W、CT2A来更方便地转换总结前言宽窄字节3:宽窄字节字符串的转换。一、为什么要进行转换?并不是程序中所有的字符串都用Unicode宽字节来表示,如网络发送......
  • 宽窄字节4:CString的方便之处及优缺点
    文章目录前言一、CString类的方便之处二、使用方式1.CString类型的一些内置成员函数。2.CString对于TCHAR的封装3.CString类对于宽窄字节的转换4.CString类的优缺点总结前言宽窄字节4:CString的方便之处及优缺点。一、CString类的方便之处CString类归属于ATL,在MF......
  • 百度面试真题 - 大小端字节序问题(联合体/共用体 - 面试加分)
    标题大小端字节序标题大小端字节序(联合体/共用体)优质资源以上bilibili教程(大小端存储-详细简介)(空间也有)目录​编辑简介大小端存储(空间视频详解):强制类型转换- char*:巧用联合体,解决百度面试题 - 大小端字节序问题:使用联合体的优点:简介......