!=
has higher precedence than &
, so your code is really doing the same as :
if ((long)Address & ( (~(sizeof(long)-1)) != 0 ) )
^ ^
gcc suggests this might be an error, which it probably is. You'd want:
if ( ( (long)Address & (~(sizeof(long)-1)) ) != 0 )
^ ^