Når to integers lægges sammen, sker det, som om de er unsigned.
Dvs. at alle 32 bits bruges, og hvis de når udover 32 bits, så "forsvinder" den 33. bit bare men de nederste 32 bits bruges.
MEN, som andre har sagt, så er integers signed, og fortolkes to komplementært.
Det betyder, at resultatet af at lægge to store positive integers sammen, kan blive negativt:
- public class Test {
- public static void main (String args[]) {
- int sum = Integer.MAX_VALUE + Integer.MAX_VALUE;
-
- System.out.println(String.format("Integer.MAX_VALUE : %d = 0x%x", Integer.MAX_VALUE, Integer.MAX_VALUE));
- System.out.println(String.format("-1 : %d = 0x%x", -1, -1));
- System.out.println(String.format("Integer.MAX_VALUE + 1 : %d = 0x%x", Integer.MAX_VALUE + 1, Integer.MAX_VALUE + 1));
- System.out.println(String.format("Integer.MAX_VALUE + Integer.MAX_VALUE : %d = 0x%x", sum, sum));
- }
- }
I koden ovenfor skriver jeg først værdien af den højeste mulige integer, både decimalt og hexadecimalt.
I anden linje skriver jeg værdien af -1, decimalt og hexadecimalt.
I linjen derefter skriver jeg summen af den højest mulige integer og 1.
Sidste linje viser summen af to højeste integers.
Resultatet er:
$ java Test
Integer.MAX_VALUE : 2147483647 = 0x7fffffff
-1 : -1 = 0xffffffff
Integer.MAX_VALUE + 1 : -2147483648 = 0x80000000
Integer.MAX_VALUE + Integer.MAX_VALUE : -2 = 0xfffffffe
Det giver mening, at hex 7fffffff + 1 er 80000000. Men det fortolkes altså to komplementært som -1.