Wieso gibts kein unsigned in Java?



  • 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)



  • nep 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?

    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)

    Beispiel! Und nicht nichts sagende Fragen. 🙄



  • blablabla... schrieb:

    Beispiel! Und nicht nichts sagende Fragen. 🙄

    Das sind doch Beispiele.

    Klar im Grunde kann man mit signed-Integern auch alles irgend wie zurecht frickeln was man mit unsigned-Integern leichter machen kann. Aber man kann mit signed-Integern ja auch alles irgend wie zurecht frickeln, was man mit Fließkomma zahlen machen kann. Also streicht bitte auch Fließkomma zahlen :p

    Und die unannehmlichkeiten fangen ja schon bei a > b an.



  • nep schrieb:

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

    dann nimmt man 'signed char' bzw. 'byte' (in Java)

    nep schrieb:

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

    wieso ist dafür ein unsigned-datentyp besser?

    nep schrieb:

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

    wieso einfacher und wieso speicherschonender 😕

    ich schliesse mich meinem vor-vorgänger an: du hast nicht eine erklärung geliefert. 😞


Anmelden zum Antworten