【发布时间】:2017-07-27 21:36:22
【问题描述】:
我刚刚尝试了这段代码:
void swapBit(unsigned char* numbA, unsigned char* numbB, short bitPosition)//bitPosition 0-x
{
unsigned char oneShift = 1 << bitPosition;
unsigned char bitA = *numbA & oneShift;
unsigned char bitB = *numbB & oneShift;
if (bitA)
*numbB |= bitA;
else
*numbB &= (~bitA ^ oneShift);
if (bitB)
*numbA |= bitB;
else
*numbA &= (~bitB ^ oneShift);
}
交换 a 和 b 的位位置 x 但由于 if() 我认为有更好的东西。
当我看到这个时:
*numbB &= (~bitA ^ oneShift);
我真的认为有一种更简单的方法可以做到这一点。 如果你有东西给我,我会接受的:)
提前致谢
【问题讨论】:
-
这不是真正的“交换数字的两位”,更像是“交换两个数字之间的一位”之类的,不过这仍然是一个令人困惑的描述..
-
第1步:使用无符号类型时,最好使用
1u << bitPosition(添加u) -
谢谢,哈罗德,我修改了标题,我不介意...... Chux,我现在就用它,谢谢:)
标签: c bit-manipulation bitwise-operators bit