2

sigdelset() 関数は、単一のビットをオフにするために使用されます。その実装は次のとおりです。

    int
    sigdelset(sigset_t *set, int signo)  //signo is the signal number
    {
    *set &= ~(1 << (signo - 1)); // turn bit off 
    return(0);
    }

このコードが理解できません。0010シグナル番号は(バイナリで)のように見えると思います。しかし、それは正しくありませんでした。

4

1 に答える 1

2

あなたは、人間の脳が 2 進数を想像する方法と、C でそれらを表す方法を混乱させています。

まず、標準 C にはバイナリ表記がありません (ただし、特定のコンパイラ0b...は拡張として受け入れます)。

2 つ目1 << (signo - 1)は、バイナリ左シフト演算子です。Signo はおそらく、オフにするビットの 1 から始まる序数です。それから 1 を引くと、0 (論理的には最初のビット) から始まる数値が得られます。次に、左シフトして 2 乗 (signo - 1) を取得します。これは、バイナリ表現が次のようになる数値です。

00000010000000... etc.
      ^
      +-  bit #signo - 1

次に、関数は~(2 の補数) 演算子を使用し、(ビットごとの代入演算子と共に&=) ビットをオフにします。

于 2012-08-12T08:32:30.940 に答える