# Zahldarstellung in Sprachen



## Andi_CH (24. Nov 2010)

[edit SlaterB: war zunächst ein Thema im Java-Quiz, dann mehr und mehr ein eigenes Thema geworden]


und meines werden wohl die meistens wissen, aber das ist eines der"Features" die rausgeschmissen gehören


```
System.out.println(10); --> Ausgabe 10
System.out.println(010); --> Ausgabe 8
```


----------



## AmunRa (24. Nov 2010)

warum sollte das rausgeschmissen gehört,

dann solltem man wohl 0x10 = 16 auch raus schmeißen.

das ist halt die schreibweise für Zahlen im Oktal-system.


----------



## SlaterB (24. Nov 2010)

0x10 wird überall auf der Welt als Hexa verstanden oder zumindest als etwas komisches erkannt wozu man erstmal die Interpretation nachfragt

010 ist eine normale Zahl, dass man mit 0en auffüllt nicht ungewöhnlich,
selbst Integer.parseInt() erkennt '010' als 10 an während 0x10 korrekterweise abgelehnt wird, 
wie es das menschliche Gehirn auch macht, sofern es die Hexa-Regel nicht explizit intus hat

010 als versteckte Octal-Syntax ist also nicht akzeptabel, weder bei Java noch Wikipedia noch sonst irgendwo,
man kann ja 8x10 einführen.. oder oc10


----------



## Andi_CH (25. Nov 2010)

AmunRa hat gesagt.:


> warum sollte das rausgeschmissen gehört,
> 
> dann sollte man wohl 0x10 = 16 auch raus schmeißen.
> 
> das ist halt die schreibweise für Zahlen im Oktal-system.



Zur ersten Zeile: Das gehört rausgeschmissen weil es gegen mathematische Regeln verstösst.
Es ist nun mal eine ganz klare mathematische Definition, dass 000010 = 010 = 10 ist
führende Nullen sind irrelevant!

0o10 währe schon besser, wenn auch schlecht lesbar, spätestens wenn es als 0O10 geschrieben würde ( -o wie Oskar )

Zur zweiten Zeile: Dem String (und das ist es auch) 0x10 sieht man es von weitem an, dass es ein Spezialfall ist

- hm in welcher Sprache ist so? Ist das C?  #8#10 
(Ja ich weiss - alles was Java programmiert wehrt sich wehement gegen C / C++ :autsch: aua - nicht so ernst nehmen bitte  aber Java hat nicht nur Verbesserungen gegenüber C / C++ gebracht)

Zur dritten Zeile: Ich neige halt dazu, gewisse Dinge zu hinterfragen und nicht einfach blind zu aktzeptieren - dazu kommt man, wenn man mehr als ein Sprache sehr gut kennt ;-)


----------



## maki (25. Nov 2010)

> Zur dritten Zeile: Ich neige halt dazu, gewisse Dinge zu hinterfragen und nicht einfach blind zu aktzeptieren - dazu kommt man, wenn man mehr als ein Sprache sehr gut kennt


Und welche Sprachen kennst du denn sehr gut?


----------



## Andi_CH (25. Nov 2010)

Pascal, Modula, Ada83, Ada95, Chill und Portal (gehören alle in etwa in die selbe Ecke)
C, C++, div Assembler (gehören in die andere Ecke )

und jetzt bin ich bei Java gelandet - das liegt irgendwo dazwischen.


----------



## maki (25. Nov 2010)

Andi_CH hat gesagt.:


> Pascal, Modula, Ada83, Ada95, Chill und Portal (gehören alle in etwa in die selbe Ecke)
> C, C++, div Assembler (gehören in die andere Ecke )
> 
> und jetzt bin ich bei Java gelandet - das liegt irgendwo dazwischen.


Dann müsstest du ja wissen das in C/C++ Oktalzahlen auch eine führende 0 haben


----------



## Andi_CH (25. Nov 2010)

maki hat gesagt.:


> Dann müsstest du ja wissen das in C/C++ Oktalzahlen auch eine führende 0 haben



Hm, wenn du es sagst wird es schon so sein, aber weder C noch C++ noch Assembler (die habe ich ganz bewusst zusammen aufgezählt) sind für mich eine Referenz wenn es um gute Programmiersprachen geht.

Die Programmiersprache ist nur ein Mittel in Ziel zu erreichen - meistens ist es sogar unwichtig welche es ist - das bestimmt eh der Arbeits- oder Auftraggeber - und bei jedem Projekt war es wieder eine andere.

Ada ist mir definitv am liebsten, auch wenn es alt ist


----------



## bygones (25. Nov 2010)

Andi_CH hat gesagt.:


> Die Programmiersprache ist nur ein Mittel in Ziel zu erreichen - meistens ist es sogar unwichtig welche es ist - das bestimmt eh der Arbeits- oder Auftraggeber - und bei jedem Projekt war es wieder eine andere.


kein wunder das so vermurkste programme heutzutage abgeliefert werden....

N Auto ist auch nur ein Mittel zum Zweck um von A nach B zu kommen, dennoch sollte man es richtig und behutsam fahren....

bygones - ist offtopic


----------



## maki (25. Nov 2010)

> Hm, wenn du es sagst wird es schon so sein...


Ja, ist auch schon seit 40 Jahren so, seit es C gibt.

Dachte dass jemand der all diese Programmiersprachen "sehr gut kennt" sowas aus dem FF weiss *g*

Ada nutzt die von dir angeführte #8#5 Notation.

Denke halt dass du mit deinen Aussagen sehr schnell bist, diese aber nicht immer richtig sind und schnell zu einer unnötigen Diskussion führen kann, wie diese hier:


> (Ja ich weiss - alles was Java programmiert wehrt sich wehement gegen C / C++  aua - nicht so ernst nehmen bitte  aber Java hat nicht nur Verbesserungen gegenüber C / C++ gebracht)


Du weisst anscheinend nicht, dass die Java Syntax eng an die C/C++ Syntax angelehnt ist, und so auch viele Altlasten blind übernommen wurden.
Wenn ich dich jetzt fragen würde, wass Java denn schlechter macht als C/C++, fürchte ich das wieder unrichtige Argumente angeführt werden, deswegen lasse ich das mal.



> Die Programmiersprache ist nur ein Mittel in Ziel zu erreichen - meistens ist es sogar unwichtig welche es ist - das bestimmt eh der Arbeits- oder Auftraggeber - und bei jedem Projekt war es wieder eine andere.


Hört sich nicht so an als ob man danach irgendeine Sprache "sehr gut kennt", mehr nach "ich kenne mehrere Sprachen ein bisschen".

Ansonsten?
Die Oktalzahlnotation ist wohl das unwichtigtigste Feature das weg gehört, gibt viel schlimmere Sachen in der Sprache & API.
Wie oft verwendet man schon Oktalzahlen? Ungefähr genauso oft wie man in Nibbles rechnet?


----------



## Landei (25. Nov 2010)

Andi_CH hat gesagt.:


> Die Programmiersprache ist nur ein Mittel in Ziel zu erreichen - meistens ist es sogar unwichtig welche es ist - das bestimmt eh der Arbeits- oder Auftraggeber - und bei jedem Projekt war es wieder eine andere.



Eine Programmiersprache beeinflußt die Art, wie wir über ein Problem denken. Z.B. hantiert man in "faulen" Sprachen wie Haskell andauernd mit unendlichen Datenstrukturen. Wenn man z.B. eine Liste von Primzahlen erstellen will, ist es ganz natürlich, eine unendliche Liste zu liefern. Man kann sich ja die ersten hundert oder die siebenundvierzigelfte einfach nehmen. Bei der gleichen Aufgabenstellung in Java wäre die erste Frage: Und wieviele Primzahlen brauche ich? Sicher könnte man die Liste auch als (unendlichen) Iterator programmieren, aber auf die Idee kommt man in Java erst gar nicht, weil so ziemlich alles andere in der Sprache endlich ist. Ich denke der Einfluss der Programmiersprache ist umso größer, je besser man programmieren kann und je ambitionierter die Ziele sind. Dass man problemlos mit jeder Sprache inklusive VB und COBOL zurechtkommt und es einem im Prinzip egal ist, welche man gerade verwendet, ist für mich ein Anzeichen dafür, dass man seine Möglichkeiten nicht ausreizt und das jeweilige Potential der verschiedenen Paradigmen nicht richtig verstanden hat.


----------



## SlaterB (25. Nov 2010)

diese unterschiedlichen Paradigmen sind der Grund, warum mit den meisten Sprachen niemals richtige Programme wie ein ordinäres Office-Paket geschrieben werden,
in der Theorie (Uni), in der Geschichte und in der Selbstfindungsphase sind Dinge wie funktionale oder logische Programmierung ganz nett,
es hat sich dann aber doch letzlich herauskristalisiert, dass heutzutage nur der imperative objektorientiere Weg richtig zählt,

alle Sprachen die so arbeiten sind ok und kann man dann bis auf Syntaxspielereien auch austauschen,
alles andere ist komplett Spielerei, ein Potential ohne Ziel,

edit:
falls man nicht getrennt in einem entsprechenden Bereich arbeitet, 
SQL wird z.B. nie imperativ werden und ist dort wo es eingesetzt wird auch gut so,
fällt dann auch nicht wirklich unter Programmiersprachen


----------



## Antoras (25. Nov 2010)

SlaterB hat gesagt.:


> in der Theorie (Uni), in der Geschichte und in der Selbstfindungsphase sind Dinge wie funktionale oder logische Programmierung ganz nett,
> es hat sich dann aber doch letzlich herauskristalisiert, dass heutzutage nur der imperative objektorientiere Weg richtig zählt


Das kann ich so nicht stehen lassen. Gerade eine Sprache wie Scala zeigt doch, dass der imperative Ansatz nicht gerade der optimalste ist. Die Verbindung der imperativen Objektorientierung mit funktionalen Paradigmen ist eine Erleichterung - sie spart Entwicklungszeit, macht den Sourcecode kürzer und macht ihn auch verständlicher. Gerade in Anbetracht dessen, dass Code öfter gelesen als geschrieben wird ist das ein nicht zu unterschätzender Vorteil. Viele der größten Stärken von Scala werden erst durch den funktionalen Sprachteil ermöglicht.

Momentan mag sich die Sprache für viele Entwickler noch nicht für größere Projekte lohnen. Das liegt aber nicht an der Sprache, sondern an fehlenden Frameworks und Libs. Vernünftige IDEs gibt es auch noch nicht. Und an Entwicklern, die mit der Sprache umgehen können, mangelt es auch noch.

Ich denke, dass sich das volle Potenzial von Scala oder anderen Multi-Paradigmen-Sprachen frühestens in ein paar Jahren entfalten kann. Scala geht immerhin einen Weg den es so vorher noch nicht in diesem Umfang gegeben hat - folglich ist die Ablehnung und die Anzahl der Vorurteile noch groß.


----------



## Andi_CH (25. Nov 2010)

Offtopic, ja, aber halt eine Diskussion die auch Vor- und Nachteil von Sprachen aufzeigen soll ;-)



bygones hat gesagt.:


> kein wunder das so vermurkste programme heutzutage abgeliefert werden....
> 
> Ein Auto ist auch nur ein Mittel zum Zweck um von A nach B zu kommen, dennoch sollte man es richtig und behutsam fahren....


Der Vergleich mit dem Auto kann aber auch zu meinen Gunsten interpretiert werden ;-)
Wenn ich ein Ziel mit einem Auto erreichen will, ist es egal oben aussen VW, Renault, BMW, Citroën, Mercedes oder was auch immer drauf steht. Für gewisse Fahrten (Ladung, Art der Strassen, Distanz) sind gewisse Fahrzeuge besser geeignet als andere, aber grundsätzlich erreiche ich das Ziel mit jedem.
Für Anfänger ist jeder Fahrzeugwechsel eine Belastung. Für den geübten Fahrer spielt es keine grosse Rolle.
Zum Glück leistet sich die Autoindustrie nicht denselben Wildwuchs wie diejenige die die Sprachen definieren - Bei allen Autos dieser Welt sind die grundlegenden Bedienelemente am selben Ort.

Nix mit erstes Element auf index 1 oder 0


Zum ersten Teil: Da hast du recht, aber nicht in der Richtung in der du es vermutlich gemeint hast.
Software schreiben ist zu mindesten 66% sprachunabhängig (Requirement-Spec, Analyse und Design)
Nur Impelentation und test sind Sprachabhängig. Früher hat man von 3 Pahsen (ohne Requirements Spec) gesprochen und sagte jede Phase brauche 1/3 - Das hat sich in seriös geführten Projekten eher noch so verschoben. Wenn zusätzlich noch Requirements-Spes geschrieben werden sinkt dadurch der prozentuale Anteil des Codier- und Testaufwandes eher unter 30%.
Der Gesamtaufwand ist dennoch nicht höher! Das ist längst bewiesen.

Leider, das sieht man hier ja vor allem im Anfänger-Thread, lernt man heute eine Programmiersprache bevor man lernt, wie man ein Problem lösen soll.

Also: Kein Wunder, dass heute vermurkste Programme produziert werden.

So genug OT für heute


----------



## bygones (26. Nov 2010)

Andi_CH hat gesagt.:


> Der Vergleich mit dem Auto kann aber auch zu meinen Gunsten interpretiert werden ;-)
> Wenn ich ein Ziel mit einem Auto erreichen will, ist es egal oben aussen VW, Renault, BMW, Citroën, Mercedes oder was auch immer drauf steht. Für gewisse Fahrten (Ladung, Art der Strassen, Distanz) sind gewisse Fahrzeuge besser geeignet als andere, aber grundsätzlich erreiche ich das Ziel mit jedem.
> Für Anfänger ist jeder Fahrzeugwechsel eine Belastung. Für den geübten Fahrer spielt es keine grosse Rolle.
> Zum Glück leistet sich die Autoindustrie nicht denselben Wildwuchs wie diejenige die die Sprachen definieren - Bei allen Autos dieser Welt sind die grundlegenden Bedienelemente am selben Ort.


so meinte ich den vergleich nicht. Man hockt sich nicht in ein Auto rein und fährt los egal was man unterm Hintern hat bzw einem autofahrer ist es nicht egal mit was er fährt und wie erfährt. 



Andi_CH hat gesagt.:


> prozentuale Anteil des Codier- und Testaufwandes eher unter 30%.


verzeih, aber in meinen Augen hast du nicht viel Ahnung von (aktueller) Softwareentwicklung. Wer immer noch meint Softwareentwicklung sei das Definieren und Klären von RequirementSpecs und danach das bisschen coding ist mal mehr als veraltet.


----------



## fastjack (26. Nov 2010)

Übrigens in Modula schreibt man auch 010 und 0x10 
Soweit ich weis wird in Pascal wird 8#10 geschrieben, aber auch 16#10.

Wie maki schon sagte, wurden bei der Entwicklung Javas viele Einflüsse aus C/C++ übernommen, aber auch aus anderen zu dieser Zeit aktuellen Programmiersprachen. Ob das gut war oder nicht, es war auf jeden Fall eine vielmehr eine politische Entscheidung um möglichst viele "User" zum Umstieg bewegen zu können.

Aber mal ehrlich: Wieso ist 010 und 0x10 eigentlich ein so großes Problem??? Der Compiler erkennt falsche Werte, eine gute IDE auch, also was solls?


----------



## Andi_CH (26. Nov 2010)

Warum wird immer der Kompiler als Referenz genommen?
human readabililty finde ich viel wichtiger, denn sonst können wir gleich zu Assembler oder noch schlimmer zu Basic  zurück kehren.

010 wird von jedem, in programmiertechnischer Hinsicht unverdorbenen Menschen, schlicht und einfach als 10 Verstanden und nicht als 8

Muster die ein "Sonderzeichen" wie x oder # enthalten sind nun mal vom Menschen viel einfacher zu erkennen.
Gerade vor Kurzem ist mir eine Textdatei in die Finger gekommen deren Werte ich dann vermutlich mal einlesen soll.

Da hat jemand der Formatierung zu liebe
001
002
007
008 -> das wird  besonders spannend
070
080
100
geschrieben und der hat sicher das Dezimalsystem gemeint ;-) (Ich werde dann ja sehen was der Scanner daraus macht)


----------



## Gast2 (26. Nov 2010)

Andi_CH hat gesagt.:


> Da hat jemand der Formatierung zu liebe
> 001
> 002
> 007
> ...



Kommt drauf an wie du die Datei einließt. Der Standard wäre ja die Zeile als String einlesen und dann die ersten drei Zeichen mit Integer.parseInt() bearbeiteten. Dann kommen ganz einfach die Integers (1,2,7,8,70,80,100) bei rum.


----------



## fastjack (26. Nov 2010)

> 010 wird von jedem, in programmiertechnischer Hinsicht unverdorbenen Menschen, schlicht und einfach als 10 Verstanden und nicht als 8



ich bin verdorben...

Allerdings habe ich auch noch nie wirklich im Leben jemanden gesehen der 00000010 schreibt, wenn er 10 meint  oder 007 (mit direkter Anspielung auf James Blond), außer in Hollywood


----------



## maki (26. Nov 2010)

> Da hat jemand der Formatierung zu liebe


Dann sollte dieser jemand weiter Cobol und PL/1 programmieren.



> 010 wird von jedem, in programmiertechnischer Hinsicht unverdorbenen Menschen, schlicht und einfach als 10 Verstanden und nicht als 8


Eben, und für die schreibt auch keinen Code und sie selbst sollten auch keinen Code schreiben.


----------



## fastjack (26. Nov 2010)

Warum wird eine Oktalzahl eigentlich mit einer 0 eingeleitet? (wie man ja so sieht, nicht nur bei Java)

P.S.: Mathematisch sind führende Nullen ohne Sinn. Also 010, 00010 ist immer 10, das beruht darauf, das sich durch führende Nullen nicht die Stellen der Zahl erhöhen. 10 ist eine zweistellige Zahl, 0010 ebenfalls.


----------



## maki (26. Nov 2010)

> Warum wird eine Oktalzahl eigentlich mit einer 0 eingeleitet? (wie man ja so sieht, nicht nur bei Java)


ist so in java, C/C++ und eingen andern Sprachen auch, per Definition.



> P.S.: Mathematisch sind führende Nullen ohne Sinn. Also 010, 00010 ist immer 10, das beruht darauf, das sich durch führende Nullen nicht die Stellen der Zahl erhöhen. 10 ist eine zweistellige Zahl, 0010 ebenfalls


Das liegt auch an der Definition 

Mathematik hat ihre Regeln, Programmiersprachen eben auch, die 2 müssen nicht unbedingt immer übereinstimmen wie man sieht.


----------



## Andi_CH (26. Nov 2010)

bygones hat gesagt.:


> so meinte ich den vergleich nicht. Man hockt sich nicht in ein Auto rein und fährt los egal was man unterm Hintern hat bzw einem autofahrer ist es nicht egal mit was er fährt und wie erfährt.
> 
> verzeih, aber in meinen Augen hast du nicht viel Ahnung von (aktueller) Softwareentwicklung. Wer immer noch meint Softwareentwicklung sei das Definieren und Klären von RequirementSpecs und danach das bisschen coding ist mal mehr als veraltet.



Ich hocke mich einfach rein und fahre los. Nach > 10^6 km habe ich genug er*fahr*ung und das zu tun. Logisch ginge es mit einem anderen Modell bequemer oder schneller, aber ich komme an.

SW-Entwicklung, heute nennt man es wohl eher SW-Engineering, mache ich ja erst seit etwa 16 Jahren und habe letztes Jahr ein Nachdiplomstudium zu genau dem Thema abgeschlossen (die Bolognareform ist übrigens bis ins Alpenland vorgedrungen - auf dem Zettel steht "Master of advanced studies ..."  )
Ich hab also nicht viel Ahnung? hi hi :applaus: für diese geniale Feststellung. Ich habe davon VIEL mehr Ahnung als von Java.

Requiremets Engineering ist die modernste Disziplin. Das Wort ist mir vor etwa 6 oder 7 Jahren das erste mal begegnet und ich kenne diverse Leute die nichts anderes machen als Requirements Engineering und sehr gut davon leben. 
-> das wird weiter zunehmen

Sprechen wir halt von SW-Engineering (IMHO ist SW-Entwicklung eine Teildisziplin davon) Die Zahlen sind, egal ob bei Banken, Versicherungen oder in der Industrie die, die ich oben erwähnt habe.
Im Grossen und ganzen hat die Qualität im Sinne von Kosten und Termintreue in den Projekten massiv zugenommen und der Test und Wartungsaufwand hat detulich abgenommen seit man mehr Engineering betreibt
-> das wird abnehmen

Wer natürlich, und das werden die meisten sein, in so genannten Wartungsprojekten arbeitet hat sicher ein anderes Bild.

Und ein letztes Statement: Wer meint SW-Entwicklung beginne mit dem Kompiler liegt daneben - die beginnt mit Analyse und Design. Alles andere ist Codieren und Testen.


----------



## fastjack (26. Nov 2010)

Mich würde nur mal konkret bei Java interessieren, warum das so ist. Das betrifft auch einige andere Sachen in Java. Jemand muß es ja definiert haben aus irgendeinem Grund.
Für manches findet man bei Google eine kleine Erklärung eines javac Entwicklers zum Beispiel, für vieles aber nicht, leider. Ich denke die vollständigen Erklärungen dieser Sachen lagern direkt neben der Kiste mit der Bundeslade.


----------



## bygones (26. Nov 2010)

Andi_CH hat gesagt.:


> SW-Entwicklung, heute nennt man es wohl eher SW-Engineering, mache ich ja erst seit etwa 16 Jahren


ich kenn Leute die haben seit 40 Jahren nen Führerschein und ich hock mich dennoch nicht in deren Auto... (um bei der Autoanalogie zu bleiben)



Andi_CH hat gesagt.:


> und habe letztes Jahr ein Nachdiplomstudium zu genau dem Thema abgeschlossen (die Bolognareform ist übrigens bis ins Alpenland vorgedrungen - auf dem Zettel steht "Master of advanced studies ..."  )


achso... na dann....



Andi_CH hat gesagt.:


> Requiremets Engineering ist die modernste Disziplin. Das Wort ist mir vor etwa 6 oder 7 Jahren das erste mal begegnet und ich kenne diverse Leute die nichts anderes machen als Requirements Engineering und sehr gut davon leben.


richtig - weil man gut davon leben kann ists gut und vor allem machen es ja auch "diverse" Leute....

ich bleib (erst recht) bei meiner Meinung, aber das ist meine Meinung... weitere Diskussion dann gern per PM

bygones... was war das Thema hier ?!


----------



## maki (26. Nov 2010)

fastjack hat gesagt.:


> Mich würde nur mal konkret bei Java interessieren, warum das so ist. Das betrifft auch einige andere Sachen in Java. Jemand muß es ja definiert haben aus irgendeinem Grund.
> Für manches findet man bei Google eine kleine Erklärung eines javac Entwicklers zum Beispiel, für vieles aber nicht, leider. Ich denke die vollständigen Erklärungen dieser Sachen lagern direkt neben der Kiste mit der Bundeslade.


Ja, viele Dinge bleiben für immer unerklärt.

z.B. warum byte in Java ein Vorzeichen braucht... steht imho dem Einsatzzweck von byte komplett entgegen.


----------



## fastjack (26. Nov 2010)

@Andi_CH ich glaube jetzt schweift es ab. Das mit dem Compiler war nur ein Tip von mir, der deutlich machen sollte, das diese Art der Zahlendarstellung auch von Java bereits zur Compilezeit gecheckt wird. Wäre das nicht so, wäre es viel schlimmer, glaub mir.

Noch was: Was zählt schon ein Stück Papier  Ich verstehe leider immer noch nicht die Dramatik dieser Zahlendarstellung. Besonders Leute mit sehr viel Erfahrung in SW-Entwicklung sollten wissen, das keine Sprache 100% rund ist und einfach drüber stehen  am Ende ist eh alles Maschinencode


----------

