0

私は学校から提供されたコードを使用する必要がありますが、シフトについてこの機能を理解していません。

誰かが私を助けることができれば。本当にいいですね。

ありがとうございました!

4

4 に答える 4

5

非常に複雑です。各反復でワンクリックでビットパターンをシフトすることをお勧めします。

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);

仕事を完了するために必要になります。

于 2013-03-24T22:42:42.613 に答える
1

それはひどい書き方c & (1 << charac)です。文字のビットが設定されているかどうかをテストしてから、SIGUSR1を使用します。それ以外の場合はSIGUSR2を使用します。

于 2013-03-24T22:40:32.063 に答える
1

手始めに、ASCIIの文字eはhex 65=binaryです01100101

コードが行うことは、反復ごとにその値をもう1ビット右にシフトし、シフト後の右端のビットが1の場合、SIGUSR1、それ以外の場合はSIGUSR2を起動します。

さて、そのコードの有用な効果が何であるかを私に尋ねても、私には手がかりがありません。

于 2013-03-24T22:40:56.517 に答える
0

c >> charac ビットを右にcharac回シフトします(したがって、charaxが3の場合、右に3回ビットシフトします

& 1 設定する最下位ビットをテストします

? SIGUSr1 : SIGUSR2 これは、前のテストの結果を使用します。設定されている場合はsigusr1を使用し、そうでない場合はsigusr2を使用します。

于 2013-03-24T22:39:54.313 に答える