2進数の一般表現を理解しているかどうかの問題です。
といっても難しくありません。
プログラムの前に準備です。
10進数の場合、
1桁目は、10の0乗(=1)の桁
2桁目は、10の1乗(=10)の桁
3桁目は、10の2乗(=100)の桁
4桁目は、10の3乗(=1000)の桁
・・・
ですね。
一桁上がると10倍になるのが、10進数なのですから。
つまり、i桁目は、10の(i-1)乗の桁であるのは分かりますね。
例えば、521という10進数は、
(右側から)
1× 10の0乗
+2× 10の1乗
+5× 10の2乗
=521
という値ということです。
ここまでは、まーそうかな、と思われることと思います。
次に2進数です。
難しく考えなくても、実は2進数も同じ構造です。
1桁目は、2の0乗(=1)の桁
2桁目は、2の1乗(=2)の桁
3桁目は、2の2乗(=4)の桁
4桁目は、2の3乗(=8)の桁
・・・
です。一桁ごとに2倍になるのが、2進数になります。
つまり、i桁目は、2の(i-1)乗の桁です。・・・①
例えば、1011という2進数は、
(右側から)
1× 2の0乗
+1× 2の1乗
+0× 2の2乗
+1× 2の3乗
=11
という値ということです。
(2進数になると頭が混乱することもありますが、10進数に置き換えて考えると、簡単に理解できるかと思います)
プログラムに戻ります。
このプログラムにおいて、上記の×××の桁というのは、exponentの事です。つまり、aには、①の内容である、2の(i-1)乗が入ります。
またbには、その桁の値にexponentを掛けた値を前の桁までの結果を加えたものになりますからエになります。