【发布时间】:2014-12-03 19:30:07
【问题描述】:
我无法弄清楚如何使用 C 处理位。想知道是否有人可以为我清理一些东西。
这些是我设置/获取/清除位的功能
unsigned char getBit(unsigned char c, int n)
{
(c & (1<<n)) >> c;
return c;
}
unsigned char setBit(unsigned char c, int n)
{
c = c |(1<<n);
return c;
}
unsigned char clearBit(unsigned char c, int n)
{
c = c & (~1<<n);
return c;
}
假设我有一个unsigned char test = 3
在二进制中,3 是 0000 0011
所以如果我要这样做printf("THIS IS THE VALUE AT BIT 0 = %hhu \n", getBit(test, 0));
我认为它会返回 1,但它会返回 test 值,即 3。
我想知道我是否做错了什么,我的 get/set/clear 函数似乎是正确的,我是否没有正确使用这些函数?
提前谢谢你。
【问题讨论】:
-
getBit在什么时候改变c的值? -
为什么它会移动
c而不是n的某些功能? -
getBit 不是要改变 c 的值,而是要找到 c 的第 n 位的值。
-
但如果它不改变
c,它只会返回为c传递的值,而不是有问题的位。
标签: c bit-manipulation bit