Compiled the following:
cpu 386
and eax, 1<<31
The result is OK.
Now compiled the following:
cpu 386
and eax, ~(1<<30)
The result is OK also.
Finally compiled the following:
cpu 386
and eax, ~(1<<31)
and received warning "dword data exceeds bounds".
I stuck upon this code for a long time being drawing the bit positions and shaking my head. All is OK, – the ~(1<<31) is the last bit cleared. The "~" operator is bitwise, so both initial data and the result are unsigned. All higher bits doesn't matter.
Please check that and remove that warning if no actual data loss.