我准备将一个十进制或者十六进制的数字中,修改其中的第7.8.9三位,同时保留修改之前这三位的状态至数组中,谁有比较优化的写法?
以358624为例吧,谢谢。
为了清晰,很多步骤拆开写了,你可以简化的
int GetBit(const int nNumber, int nPos)
{
nPos = nPos % 32;
return ((nNumber >> nPos) & 0x01);
}
int SetBit(const int nNumber, int nPos, const int nValue)
{
int nFalg = 0x1;
nPos = nPos % 32;
if (nValue == 0)
{
nFalg = nFalg << nPos;
nFalg = ~nFalg;
return (nNumber & nFalg);
}
else
{
nFalg = nFalg << nPos;
return (nNumber | nFalg);
}
return nNumber;
}
int main()
{
// 二进制位假设索引从0开始,比如00100000我们说第五位是1
int nTestValue = 358624; //10101111000 1 1100000
// 如果第7位是1则设置成0 //10101111000 0 1100000
if (GetBit(nTestValue, 7) == 1)
{
nTestValue = SetBit(nTestValue, 7, 0);
}
printf("nTestValue = %d\n", nTestValue); // 358496
return 0;
}
你现在的难点在哪里?
自己会写,只是想找一个好的方法吗?
如果你只是修改二进制中7,8,9位,貌似不用转化成2进制再转回来,位运算不就行了?