右辺値の取り得る最大の値(計算途中も含む)は、処理系の持つ最も大きい型の最大値(この例では一応unsigned longに)なんでしょうか
(というか、計算途中の事が知りたい)
例えば、
a= (b+1)%100;
b=ULONG_MAXでunsigned long型とすると
1. b+1を計算して0になる
2. b+1を計算してULONG_MAX+1の値になる

で、試してみたら1番の結果になりました。
計算途中は処理系限界最大値を超えてるけど、左辺に代入する時は
左辺の型の最大値を下回ってるっていう時、皆さんはどうします?