[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