7

可能重复:
如何在 C 中设置、清除和切换单个位?

我正在为即将到来的期末考试而学习,我想验证学习指南中的一些问题。

一些上下文:

  • Set()函数将一个字节中的一个位设置为 1

  • Unset()函数将一个字节中的一个位设置为 0

  • Flip()功能将位“翻转”到与它相反的位置

所以我们班的某个孩子自己回答了学习指南的问题,但我已经发现了一些错误,这些答案听起来很可疑。他是这样说的:

哪个操作用于 Set?or 运算符 |

哪个操作用于 Unset?Xor 运算符 ^ 完成两次

哪个操作用于翻转?异或运算符 ^

这些是在我上面描述的函数中实现的正确按位运算符吗?

4

4 回答 4

6

设置用途或

未设置使用 And

翻转使用异或

这已经在这里得到了回答: 你如何设置、清除和切换一个位?

于 2012-08-09T13:35:37.143 回答
2

你对第一个是正确的,但你应该在那一点上Unset()使用&with0

于 2012-08-09T13:35:46.707 回答
0
    00000000 |
    00000001 =
--------------
    00000001   // Sets

    00000001 &
    00000000 =
--------------
    00000000   // Unsets

    00000001 ^
    00000001 =
--------------
    00000000   // Flips

Ifbit是要在字节中操作的位:

x |= (1 << bit);    // Sets
x &= ~(1 << bit);   // Unsets   00000001 becomes 11111110.
x ^= (1 << bit);    // Flips
于 2012-08-09T13:42:43.050 回答
0

对于数字 x 中的第 n 位...

int Set(x, n){
   return x | (1 << n);
}

int Unset(x, n){
   return (x ^ (1 << n)) ^ (1 << n);
}

int Flip(x, n){
   return x ^ (1 << n);
}
于 2012-08-09T13:49:44.707 回答