Negate long
Bytecode
Type | Description |
u1 | lneg opcode = 0x75 (117) |
Stack ..., value.word1, value.word2 => ..., result.word1, result.word2
Description
The value must be of type long
. It is popped from
the operand stack. The long
result is the arithmetic negation of value,
-value. The result is pushed onto the operand stack.
For long
values, negation is the same as subtraction
from zero. Because the Java Virtual Machine uses two's-complement representation for
integers and the range of two's-complement values is not symmetric, the negation of the
maximum negative long
results in that same maximum negative number. Despite
the fact that overflow has occurred, no exception is thrown.
For all long
values x
, -x
equals (~x)
+
1
.
Notes
Because of the two's-complement representation used for negative numbers, negating Long.MIN_VALUE actually produces Long.MIN_VALUE, not Long.MAX_VALUE as you might expect.