例如:一个二进制数:100100 从低位开始第三位取反,即变成:100000
则可这样做:
步骤1:将0x01 左移三位, 变成:000100;
步骤2:再将步骤1得数取反:111011;
步骤3:最后拿原来的数同步骤2的数做按位与&操作;
换成代码为:
int targetIndex=3;
int originalNum=24;//(二级制:100100)
int temp = 0x0001 << targetIndex;
int result = originalNum &= ~temp;
应用场景:指示灯状态,高低电平切换,如在原来状态基础上设置指定数据位为高电平,则可按照上面的方法做按位与计算,代码为:
int targetIndex=3;
int originalNum=24;//(二进制:100100)
int temp = 0x0001 << targetIndex;
int result = originalNum |= temp;
同理:检测某个数据位是否为1或0的值:则可这样判断:
if (((ledStatus >> targetIndex) & 0x01) == 1)// 1
if (((ledStatus >> targetIndex) & 0x01) == 0)// 0
综合例子:
/// <summary>
/// 把一个数的指定bit位设置 0 或1 ,
/// </summary>
/// <param name="tag"></param>
/// <param name="bitIndex"></param>
/// <param name="trueORFalse"></param>
void ReverseBit(ref byte tag, byte bitIndex, bool trueORFalse)
{
byte temp = (byte)(0x01 << bitIndex);
if (trueORFalse)
{
tag |= temp;
}
else
{
if (((tag >> bitIndex) & 0x01) == 1)
{
tag &= (byte)(~temp);
}
}
}