Ihre Frage lautet "Warum unterstützt Java keine vorzeichenlosen Ints"?
Und meine Antwort auf Ihre Frage lautet, dass Java möchte, dass alle primitiven Typen: Byte , Zeichen , Kurz , Int und Lang genau wie in Assembly als Byte , Wort , Dword und Qword behandelt werden und die Java-Operatoren signiert werden Operationen für alle primitiven Typen außer char , aber nur für char sind sie nur 16-Bit ohne Vorzeichen.
Daher wird angenommen, dass statische Methoden auch für 32- und 64-Bit- Operationen ohne Vorzeichen sind .
Sie benötigen die letzte Klasse, deren statische Methoden für die vorzeichenlosen aufgerufen werden können Operationen .
Sie können diese letzte Klasse erstellen, sie beliebig nennen und ihre statischen Methoden implementieren.
Wenn Sie keine Ahnung haben, wie die statischen Methoden implementiert werden sollen, klicken Sie auf diesen Link kann Ihnen helfen.
Meiner Meinung nach ist Java C ++ überhaupt nicht ähnlich , wenn es weder vorzeichenlose Typen noch unterstützt Überladen von Operatoren denke ich, dass Java als völlig andere Sprache als C ++ und C behandelt werden sollte.
Es ist übrigens auch im Namen der Sprachen völlig anders.
Daher empfehle ich in Java nicht, Code ähnlich wie C ++ einzugeben, und ich empfehle überhaupt nicht, Code ähnlich C ++ einzugeben, da Sie dann in Java nicht in der Lage sind, das zu tun, was Sie als Nächstes in C ++ tun möchten. dh der Code wird überhaupt nicht mehr C ++ sein und für mich ist es schlecht, so zu codieren, um den Stil in der Mitte zu ändern.
Ich empfehle, statische Methoden auch für die signierten Operationen zu schreiben und zu verwenden, sodass Sie in der Codemischung aus Operatoren und statischen Methoden sowohl für signierte als auch für nicht signierte Operationen nichts sehen, es sei denn, Sie benötigen nur signierte Operationen im Code, und das ist in Ordnung Verwenden Sie nur die Operatoren.
Außerdem empfehle ich, die Verwendung von kurzen , int und langen primitiven Typen zu vermeiden und Wort , Wort und Wort zu verwenden stattdessen zu verwenden, und Sie werden die statischen Methoden für vorzeichenlose Operationen und / oder vorzeichenbehaftete Operationen aufrufen, anstatt Operatoren zu verwenden.
Wenn Sie nur signierte Operationen ausführen und die Operatoren nur im Code verwenden möchten, ist es in Ordnung, diese primitiven Typen short , int und long zu verwenden .
Eigentlich tun es Wort , Wort und Wort nicht existieren in der Sprache, aber Sie können für jede neue Klasse erstellen und mit der Durchführung jeder sollte sehr einfach sein:
Die Klasse Wort hält die primitive Art kurz nur, die Klasse dword den Urtyp hält int nur und die Klasse qword hält den Urtyp lange nur. Jetzt können Sie alle vorzeichenlosen und vorzeichenbehafteten Methoden als statisch oder nicht nach Ihrer Wahl in jeder Klasse implementieren, dh alle 16-Bit-Operationen, sowohl vorzeichenlos als auch signiert, indem Sie der Wortklasse Bedeutungsnamen geben , alle 32-Bit-Operationen sowohl vorzeichenlos als auch signiert durch Angabe von Bedeutungsnamen für die Dword- Klasse und alle 64-Bit-Operationen ohne Vorzeichen und signiert durch Angabe von Bedeutungsnamen für die qword- Klasse.
Wenn Sie nicht gerne zu viele verschiedene Namen für jede Methode angeben, können Sie in Java immer eine Überladung verwenden. Gut zu lesen, dass Java das nicht auch entfernt hat!
Wenn Sie Methoden anstelle von Operatoren für vorzeichenbehaftete 8-Bit-Operationen und Methoden für vorzeichenlose 8-Bit-Operationen ohne Operatoren wünschen, können Sie die Byte- Klasse erstellen (beachten Sie, dass der erste Buchstabe 'B' Großbuchstaben ist, dies ist also nicht der primitives Typbyte ) und implementieren Sie die Methoden in dieser Klasse.
Über das Übergeben von Werten und Übergeben von Referenzen:
Wenn ich mich nicht irre, wie in C #, werden primitive Objekte natürlich als Wert übergeben, aber Klassenobjekte werden natürlich als Referenz übergeben, was bedeutet, dass Objekte vom Typ Byte , Wort , Dword und Qword als Referenz und nicht als Wert übergeben werden standardmäßig. Ich wünschte, Java hätte Strukturobjekte wie C #, so dass alle Bytes , Wörter , Wörter und QWords so implementiert werden könnten, dass sie Struktur statt Klasse sindDaher wurden sie standardmäßig als Wert und nicht standardmäßig als Referenz übergeben, wie jedes Strukturobjekt in C #, wie die primitiven Typen, als Wert und nicht standardmäßig als Referenz, sondern weil Java schlechter ist als C # und wir haben Um damit umzugehen, gibt es nur Klassen und Schnittstellen, die standardmäßig als Referenz und nicht als Wert übergeben werden. Also , wenn Sie weitergeben wollen Byte , Wort , dword und qword Objekte von Wert und nicht nach, wie jede andere Klasse Objekt in Java und auch in C #, müssen Sie einfach die Kopie Konstruktor verwenden und das ist es.
Das ist die einzige Lösung, über die ich nachdenken kann. Ich wünschte nur, ich könnte die primitiven Typen einfach in word, dword und qword eingeben, aber Java unterstützt weder typedef noch die Verwendung überhaupt, im Gegensatz zu C #, das die Verwendung unterstützt , was dem typedef des C entspricht.
Informationen zur Ausgabe:
Für dieselbe Folge von Bits können Sie sie auf verschiedene Arten drucken: Als binär, als Dezimalzahl (wie die Bedeutung von% u in C printf), als Oktal (wie die Bedeutung von% o in C printf), als Hexadezimalzahl (wie) die Bedeutung von% x in C printf) und als Ganzzahl (wie die Bedeutung von% d in C printf).
Beachten Sie, dass C printf den Typ der Variablen, die als Parameter an die Funktion übergeben werden, nicht kennt. Daher kennt printf den Typ jeder Variablen nur von dem char * -Objekt, das an den ersten Parameter der Funktion übergeben wird.
In jeder der Klassen: Byte , Wort , Dword und Qword können Sie die Druckmethode implementieren und die Funktionalität von printf abrufen. Auch wenn der primitive Typ der Klasse signiert ist, können Sie ihn dennoch als nicht signiert drucken, indem Sie einem Algorithmus folgen logische und Verschiebungsoperationen, damit die Ziffern in die Ausgabe gedruckt werden.
Leider zeigt der Link, den ich Ihnen gegeben habe, nicht, wie diese Druckmethoden implementiert werden, aber ich bin sicher, dass Sie nach den Algorithmen suchen können, die Sie zum Implementieren dieser Druckmethoden benötigen.
Das ist alles, was ich auf Ihre Frage beantworten und Ihnen vorschlagen kann.