バイトが8ビットじゃない場合だって?

long a;
a = 0;
a = (long)((~((unsigned long)a)) >> 1);