Is er een manier om een unsigned int te declareren in Java?
Of de vraag kan ook als volgt worden geformuleerd: Wat is het Java-equivalent van unsigned?
Om even de context aan te geven was ik aan het kijken naar Java's implementatie van String.hashcode()
. Ik wilde de mogelijkheid van botsing testen als het gehele getal 32 unsigned int. zou zijn.
Java heeft geen datatype voor unsigned integers.
Je kunt een long
definiëren in plaats van een int
als je grote waarden moet opslaan.
U kunt ook een ondertekend geheel getal gebruiken alsof het niet ondertekend is. Het voordeel van two's complement representation is dat de meeste operaties (zoals optellen, aftrekken, vermenigvuldigen, en links verschuiven) identiek zijn op binair niveau voor getekende en niet-tekenende gehele getallen. Een paar bewerkingen (delen, shift naar rechts, vergelijking en casting) zijn echter verschillend. Vanaf Java SE 8, nieuwe methoden in de Integer
klasse kunt u volledig gebruik maken van de int
data type om unsigned rekenkundige uit te voeren:
In Java SE 8 en later kunt u het datatype int gebruiken om een niet-ondertekend 32-bits geheel getal weer te geven, dat een minimale waarde van 0 en een maximale waarde van 2^32-1 heeft. Gebruik de klasse Integer om het gegevenstype int te gebruiken als een niet-ondertekend geheel getal. Statische methoden zoals
compareUnsigned
,divideUnsigned
enz zijn toegevoegd aan de Integer klasse om de rekenkundige bewerkingen voor niet-getekende gehele getallen te ondersteunen.
Merk op dat int
variabelen nog steeds ondertekend zijn wanneer ze gedeclareerd worden, maar niet-tekenings rekenkundige bewerkingen zijn nu mogelijk door gebruik te maken van deze methoden in de Integer
klasse.