http://fhgi.2-d.jp/2-3.c.txt

【質問テンプレ】
[1] 授業単元:本による独学
[2] 問題文(含コード&リンク): http://fhgi.2-d.jp/2-3.c.txt
[4] 期限: 無期限

計算機科学の基礎的な質問かもしれませんがこのプログラム実行させると
『0-01111110-10000000000000000000000』といった出力を得られます
何故こうなるのかが分からないです

if (l%2 == 1) の1行に全てが詰まっているはずなのですが、
l(小文字のL)はを2で割っていくと余りは全て0になる気がするのですが

あとmemcpy()関数でなぜ型の違う値を代入しているのですか?
unsigned longの符号無し整数型にfloatの符号有り浮動小数点型を代入してるのが意味不明です