[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
このビット演算子のプログラムが何をしているのか1行ごとにコメントをつけてください。
お願いします。

int main()
{
int i, d;
d=0;

while(1) {
printf("Input number ");
scanf("%d", &d);
if(d == 0){break;}
if(d > 8 || d < -8) printf("error\n");
else if(d > 0) i=i|1 << d - 1;
else i &= ~(1 << -d - 1);
printf("%d%d%d%d%d%d%d%d\n",i>> 7&1,i>> 6&1,i>> 5&1,i>> 4&1,i>> 3&1,i>> 2&1,i>> 1&1,i&1);
}

return 0;
}

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 
[3.3] 言語: C言語
[4] 期限:とくになし
[5] その他の制限: