私は学校から提供されたコードを使用する必要がありますが、シフトについてこの機能を理解していません。
誰かが私を助けることができれば。本当にいいですね。
ありがとうございました!
非常に複雑です。各反復でワンクリックでビットパターンをシフトすることをお勧めします。
int c ;
for (c = 'e'; c; c>>=1)
{
kill(pid, (c & 1) ? SIGUSR1 : SIGUSR2);
}
副作用として、これは魔法の定数を回避します(これは、IMHO8
であるはずです)CHAR_BIT
ところで:このコードは完全に同等ではありません。元のコードは常に8つのkill()呼び出しを発行します。これは、7番目(CHAR_BIT == 8の場合)の後に停止するため、追加の
kill(pid, SIGUSR2);
仕事を完了するために必要になります。
それはひどい書き方c & (1 << charac)
です。文字のビットが設定されているかどうかをテストしてから、SIGUSR1を使用します。それ以外の場合はSIGUSR2を使用します。
手始めに、ASCIIの文字eはhex 65
=binaryです01100101
コードが行うことは、反復ごとにその値をもう1ビット右にシフトし、シフト後の右端のビットが1の場合、SIGUSR1、それ以外の場合はSIGUSR2を起動します。
さて、そのコードの有用な効果が何であるかを私に尋ねても、私には手がかりがありません。
c >> charac
ビットを右にcharac回シフトします(したがって、charaxが3の場合、右に3回ビットシフトします
& 1
設定する最下位ビットをテストします
? SIGUSr1 : SIGUSR2
これは、前のテストの結果を使用します。設定されている場合はsigusr1を使用し、そうでない場合はsigusr2を使用します。