sigdelset()函数用于关闭单个位。这是它的实现:
int
sigdelset(sigset_t *set, int signo) //signo is the signal number
{
*set &= ~(1 << (signo - 1)); // turn bit off
return(0);
}
我听不懂这段代码。我认为信号编号看起来像
0010
(二进制)。但是它看起来不对。 最佳答案
您对人脑如何想象二进制数以及我们如何用C表示二进制数感到困惑。
首先,标准C中没有二进制符号(但是某些编译器接受0b...
作为扩展名)。
其次,1 << (signo - 1)
是二进制左移运算符。 Signo可能是要关闭的位的序数,从1开始。然后我们从中减去1,因此我们得到一个从0开始的数(逻辑上是第一个位)。然后我们将其左移以获得2的幂(signo-1),这是一个二进制表示形式如下的数字:
00000010000000... etc.
^
+- bit #signo - 1
然后,该函数使用
~
(2的补码)运算符,这将导致(以及按位和赋值运算符&=
)关闭该位。关于c - 与sigdelset()函数混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11920793/