![](/img/trans.png)
[英]What does the following mean with respect to, bitwise operations in C programming?
[英]What does the following mean with respect to, bitwise operations in C?
一本关于 C 编程状态的书,
enum corvid { magpie , raven , jay , chough , corvid_num , };
# define FLOCK_MAGPIE 1 U
# define FLOCK_RAVEN 2 U
# define FLOCK_JAY 4 U
# define FLOCK_CHOUGH 8 U
# define FLOCK_EMPTY 0 U
# define FLOCK_FULL 15 U
int main ( void ) {
unsigned flock = FLOCK_EMPTY ;
if ( something ) flock |= FLOCK_JAY ;
...
if ( flock & FLOCK_CHOUGH )
do_something_chough_specific ( flock ) ;
在这里,每种类型的 corvid 的常数都是 2 的幂,因此它们的二进制表示中只有一个位。 然后可以通过运算符处理群中的成员资格: |= 向群中添加一个 corvid,并且 & 使用其中一个常量测试是否存在特定的 corvid
问题。 “if (something)flock |= FLOCK_JAY;”为flock 添加了一个corvid,但为什么不使用赋值运算符或“flock = FLOCK_JAY”。
另外,“if (flock & FLOCK_CHOUGH)”会产生一个布尔类型的值吗?
问题。 “if (something)flock |= FLOCK_JAY;”为flock 添加了一个corvid,但为什么不使用赋值运算符或“flock = FLOCK_JAY”。
|=
每当想要保留已在变量中设置的其他位时使用。 在这种特定情况下,设置=
或|=
无关紧要,因为flock
的值为零。
另外,“if (flock & FLOCK_CHOUGH)”会产生一个布尔类型的值吗?
它将产生一个unsigned int
,因为两个操作数都是那种类型。 它将保存一个零或非零值。 这可以被视为等效于 boolean 条件。 如果您明确执行bool b = flock & FLOCK_CHOUGH;
则只会获得 bool 类型 .
Q1:分配而不是 ORing 会淘汰其他鸟类类型。 说
flock = FLOCK_MAGPIE;
如果你设置
flock = FLOCK_JAY;
羊群中不会有喜鹊,但如果你
flock |= FLOCK_JAY;
羊群将包含松鸦和喜鹊。
Q2:if 语句中的条件不会产生布尔值。 任何非零值都为真。 零值是假的。 如果您想要 boolean 值,请尝试
if ((flock & FLOCK_CHOUGH) != 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.