Wieso gibts kein unsigned in Java?



  • pale dog schrieb:

    btw: ich persönlich finde 'unsigned' nicht verwirrend, im gegenteil, als anfänger fand ich 'signed' variablen komisch...

    da musst du aber früh mit programmieren angefangen haben, wenn du damals noch nicht wusstest dass es auch negative zahlen gibt (die haben sogar auch einen sinn 👍 ) 😮 😮



  • pale dog schrieb:

    rüdiger schrieb:

    Wobei ich nicht glaube das 'unsigned' keinen Mehrwert bringt.

    manchmal ja, aber in den meisten fällen geht's auch ohne...

    Schon mal was von Bildverarbeitung gehört? Da ist es z.B. sehr wichtig, dass es auch unsigned Datentypen gibt.


  • Mod

    nep schrieb:

    Schon mal was von Bildverarbeitung gehört? Da ist es z.B. sehr wichtig, dass es auch unsigned Datentypen gibt.

    Eigentlich nicht. ...und ich mach ne Menge mit Bildern. ...ok, wäre ganz nett, wenn man ein unsigned byte hätte. Aber das war es dann auch schon. Letztendlich betrifft das dann nur eine kleine Stelle im ganzen Programm, wo man ein bischen bei der Umwandlung zwischen byte und int (oder float) trixt, um den abgespeicherten Pixelwert so zu interpretieren, wie man es gerne hätte.

    Letztendlich muss man eh für viele Verarbeitungsschritte auf Datentypen ausweichen, die einen deutlich größeren Bereich als byte abdecken.



  • Find ich nicht. Also da wo ich im Moment arbeite ist es eigentlich sehr praktisch dass es unsigned Typen gibt. Ausserdem gibt es auch viele Formate, in denen man mehrere Farbkomponeten in einem unsigned int abspeichert.
    Es geht auch nicht immer nur um Bytes, gibt ja noch wesentlich mehr als nur Bittiefen von 8 Bit pro Komponente...

    Ist ja nicht so, dass das unmöglich in Java wäre, aber doch sehr unpraktisch und oft auch mit Speicher/Geschwindigkeitseinbußen verbunden...


  • Mod

    nep schrieb:

    Ist ja nicht so, dass das unmöglich in Java wäre, aber doch sehr unpraktisch und oft auch mit Speicher/Geschwindigkeitseinbußen verbunden...

    Willst Du mich herausfordern? 😃 ...ein kleines Bildverarbeitungsproblem in Java zu lösen, das Du gleichzeitig in C++ löst? 😉



  • Ich hab eh den längeren 😛 😉

    Nein mal im Ernst. Ich denke dass wir sowieso etwas aneinander vorbeireden.
    Wir beschäftigen uns z.B. mit Formaten wie DPX oder DVS, die man so normalerweise eh nicht benutzt. Geht also weniger um so "klassische" Dinge wie z.B. Gaussfilter oder sowas. Und da ist es schon sehr praktisch die ganzen unsigned-Typen zu haben.



  • nep schrieb:

    Und da ist es schon sehr praktisch die ganzen unsigned-Typen zu haben.

    wieso?
    signed typen kann man auch prima shiften und mit AND/OR/XOR bearbeiten.
    🙂



  • Merkst du was?



  • Macht das nen unterschied? Ich dachte and or und xor sind bitoperationen, bei denen nicht zwischen signed und unsigned unterschieden wird.


  • Mod

    nep schrieb:

    Ich hab eh den längeren 😛 😉

    Nein mal im Ernst. Ich denke dass wir sowieso etwas aneinander vorbeireden.
    Wir beschäftigen uns z.B. mit Formaten wie DPX oder DVS, die man so normalerweise eh nicht benutzt.

    Die Speicherung in bestimmten Formaten sehe ich durchaus auch als einen Bereich an, in dem unsigned Typen sinnvoll sind. Aber das war es dann schon fast innerhalb der Bildverarbeitung. ...insofern ist das nur am Rande interessant.

    BTW: Hast Du es mal ohne unsigned Typen probiert? Macht das da wirklich so einen großen Unterschied?

    BTW2: wikipedia spuckt mir bezüglich DPX etwas mit einem 10 Bit Format aus. Da passen die unsigned Typen wohl auch nicht so perfekt. Wenn Du da keinen 10-Bit Datentyp zur Verfügung hast, dann brauchst Du eh 2 Byte, um das zu verarbeiten. Da spielt es keine Rolle, ob das oberste Bit jetzt für ein Vorzeichen genutzt wird.



  • Bei DPX gibt es viele Bittiefen, wir benutzen maximal 16 Bit.

    Ich sag ja auch nicht, dass es nicht auch mit signed-Typen geht, es ist nur einfacher wenn man gleich unsigned-Typen hat.


  • Mod

    nep schrieb:

    Bei DPX gibt es viele Bittiefen, wir benutzen maximal 16 Bit.

    Umso eher nutzt man dann doch zu Verarbeitungszwecken ganz generell einen Pixeltyp, der alles einfach erschlägt. Ein float pro Kanal zum Beispiel. ...und wandelt dann nur am Schluss in das jeweilige Format um, das man gerne hätte. Zum Beispiel ungefähr so:

    myByteValue = (byte)((myFloatValue * 255.0f) + 0.5f);
    

    ...um aus dem float ein byte zu machen, in dem alles so gespeichert ist, als ob es ein unsigned Byte wäre.

    Das ist eine einzige Zeile in einer Methode "speicherMichAlsDPXMit8Bit". Und da müsstet Ihr ja sowieso irgendeine Zeile in der Art haben. Unabhängig davon, ob das nun unsigned 8 Bit oder sonst etwas ist.



  • nep schrieb:

    Ich sag ja auch nicht, dass es nicht auch mit signed-Typen geht, es ist nur einfacher wenn man gleich unsigned-Typen hat.

    hast du ein konkretes beispiel?
    was ist einfacher mit unsigned typen?
    an bitoperationen kann's doch nicht liegen, oder?



  • pale dog schrieb:

    nep schrieb:

    Ich sag ja auch nicht, dass es nicht auch mit signed-Typen geht, es ist nur einfacher wenn man gleich unsigned-Typen hat.

    hast du ein konkretes beispiel?
    was ist einfacher mit unsigned typen?
    an bitoperationen kann's doch nicht liegen, oder?

    doch. und modulo.



  • Mr. N schrieb:

    pale dog schrieb:

    nep schrieb:

    Ich sag ja auch nicht, dass es nicht auch mit signed-Typen geht, es ist nur einfacher wenn man gleich unsigned-Typen hat.

    hast du ein konkretes beispiel?
    was ist einfacher mit unsigned typen?
    an bitoperationen kann's doch nicht liegen, oder?

    doch. und modulo.

    und was ist doof damit? kann das irgendjemand erklären?



  • pale dog schrieb:

    Mr. N schrieb:

    pale dog schrieb:

    nep schrieb:

    Ich sag ja auch nicht, dass es nicht auch mit signed-Typen geht, es ist nur einfacher wenn man gleich unsigned-Typen hat.

    hast du ein konkretes beispiel?
    was ist einfacher mit unsigned typen?
    an bitoperationen kann's doch nicht liegen, oder?

    doch. und modulo.

    und was ist doof damit? kann das irgendjemand erklären?

    shiften geht zB nicht richtig



  • Könnte ihr auch mal ein richtiges Beispiel bringen, bei denen mit signet typen bitoperationen nicht gehen und nicht nur blabla.
    http://de.wikipedia.org/wiki/Bitweiser_Operator

    In Java sind alle Ganzzahl-Datentypen vorzeichenbehaftet und die Operatoren "<<" und ">>" führen arithmetische Verschiebungen durch. In Java gibt es zusätzlich den Operator ">>>", der eine logische Rechtsverschiebung durchführt. Da logische und arithmetische Linksverschiebungen identisch sind, gibt es keinen "<<<" Operator.



  • Mr. N schrieb:

    shiften geht zB nicht richtig

    das halte ich für ein gerücht.
    hast du mal ein codebeispiel, das fehlerhaftes shiften demonstriert?



  • pale dog schrieb:

    Mr. N schrieb:

    shiften geht zB nicht richtig

    das halte ich für ein gerücht.
    hast du mal ein codebeispiel, das fehlerhaftes shiften demonstriert?

    Ich lese gerade, dass es wohl einen operator >>> gibt.



  • pale dog schrieb:

    nep schrieb:

    Ich sag ja auch nicht, dass es nicht auch mit signed-Typen geht, es ist nur einfacher wenn man gleich unsigned-Typen hat.

    hast du ein konkretes beispiel?
    was ist einfacher mit unsigned typen?
    an bitoperationen kann's doch nicht liegen, oder?

    Na ganz einfach, wurde ja auch schon mal erwähnt. Was wenn du z.B. Bytes auslesen willst, aber eben kein unsigned char hast?

    Oder was wenn du Bytes auslesen willst die in 32 Bit Wörter gepackt sind, und diese dann z.B. auswerten willst?

    Und ja, natürlich geht das auch ohne unsigned-Typen, aber es ist halt einfacher wenn man welche hat (bzw. z.B. speicherschonender)


Anmelden zum Antworten