繁体   English   中英

以下关于 C 中的按位运算是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM