simples Ausdrucksproblem



  • Hallo,

    digitOffset[i] = (14 + (i*16)) / 256;
    

    erhofftes Ergebniss (bei i=0): 14/256
    reales Ergebniss: 0

    Ich raffe es einfach nicht, wieso hier nicht gemäß der Mathematischen Notation gerechnet wird. Die Klammern haben doch eine höhere Priorität als die Division?!
    Es liegt an der Division, soviel weiß ich, nur verstehe ich das Problem nicht.

    Vielen Dank für eine Antwort!



  • int werte kennen keine stellen nach dem komma, da wird hemmungslos weggekürzt.

    digitOffset[i] = (14 + (i*16)) / 256.0f;
    

    sollte helfen(aber nur wenn digitoffset ein float/double ist ;))



  • 14+(0*16)=14+0=14;
    14/256=0.054 => wird zu null gekürzt, falls int. Ist digitOffset vom Typ int?



  • Jo, digitOffset[] war natürlich ne Fließpunkvariable.

    Kann mir bitte jemand kurz erklären warum hier 256 als Fließpunktzahl angegeben werden muss?
    Warum macht dies der Compiler nicht automatisch?



  • Naja - ich kanns mir schon denken:

    man wollte wieder mal die Trickkiste von C/C++ auf Kosten der Einfachheit erweitern.

    Lang lebe JAVA! 😉



  • JWolfram schrieb:

    Jo, digitOffset[] war natürlich ne Fließpunkvariable.

    Kann mir bitte jemand kurz erklären warum hier 256 als Fließpunktzahl angegeben werden muss?
    Warum macht dies der Compiler nicht automatisch?

    es wird einfach der ausdruch 14/256 ausgewertet. da der / operator eine ganzzahldivison durchführt, wenn keine kommazahl beteiligt ist, ist das ausdrucksergebnis dann 0. der compiler hat keine chance, zu erkennen, daß du eine "herkömmliche" division willst. deshalb mußt du eben sozusagen "zähler" oder "nenner" ausdrücklich als kommatyp angeben, wenn sies nicht sowieso sind.

    wenn du z.b. zuvor eine variable float x vereinbart hast, wird bei x/100 auch auf jeden fall eine "herkömmliche" divison durchgeführt, weil x eben ein kommatyp ist; auch wenn x zufällig einen ganzzahligen wert hat ändert das dann nichts.



  • hallo??

    das ist in java auch nicht anders 😉

    class Test{
    
    	public static void main(String args[]){
    
    		float digit = (14 / 256);
    		System.out.println(digit);
    	}
    }
    


  • Gut... Danke für die Hilfe!


Anmelden zum Antworten