自己工作中遇到需要对单字节的高位、低位进行赋值,即一个字节byte,想要给每一位都赋值,这个值是动态来的,是0或是1。
好不容易收集到一些珍贵资料,整理一下:
一、设置
方法code:
/// <summary>
/// 设置某一位的值
/// </summary>
/// <param name="data"></param>
/// <param name="index">要设置的位, 值从低到高为 1-8</param>
/// <param name="flag">要设置的值 true / false</param>
/// <returns></returns>
byte set_bit(byte data, int index, bool flag)
{
if (index > 8 || index < 1)
throw new ArgumentOutOfRangeException();
int v = index < 2 ? index : (2 << (index - 2));
return flag ? (byte)(data | v) : (byte)(data & ~v);
}
调用code:
byte s = set_bit(8, 8, true);
结果:
s 的值为 136, 结果正确。
二、获取值
获取一个字节中的每一位的值,需要分别与128 64 32 16 8 4 2 1相与&运算
假设字节为byte1
bit8 = byte1 & 128 == 128 ? 1 : 0;
bit7 = byte1 & 64 == 64 ? 1 : 0;
bit6 = byte1 & 32 == 32 ? 1 : 0;
bit5 = byte1 & 16 == 16 ? 1 : 0;
bit4 = byte1 & 8 == 8 ? 1 : 0;
bit3 = byte1 & 4 == 4 ? 1 : 0;
bit2 = byte1 & 2 == 2 ? 1 : 0;
bit1 = byte1 & 1 == 1 ? 1 : 0;
另外,收集到网络上的其他资料:
引用:http://topic.csdn.net/u/20100121/11/66a2561e-49de-48d6-b0aa-4f3d1fea62e4.html