![]() |
|
|||||||
| Newsgroup de.comp.lang.c Die Programmiersprache C (ISO, ANSI, K&R). |
![]() |
|
|
Themen-Optionen | Ansicht |
|
#1
|
|||
|
|||
|
Das Buch "C von A bis Z" von Galileio-Computing gibt's
jetzt als Download: http://openbook.galileocomputing.de/c_von_a_bis_z/ http://download.galileo-press.de/ope...on_a_bis_z.zip |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Gerald Breuer wrote:
> Das Buch "C von A bis Z" von Galileio-Computing gibt's > jetzt als Download: > > http://openbook.galileocomputing.de/c_von_a_bis_z/ Das ist jetzt nicht wirklich neu. Das Ding ist doch hier schon vor Ewigkeiten verrissen worden. "5.2 Der Datentyp »int« (Integer) Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 bis +32767 beschreiben." Zwei Sätze, zwei Fehler. Stefan |
|
#3
|
|||
|
|||
|
Stefan Reuther schrieb:
> Gerald Breuer wrote: >> Das Buch "C von A bis Z" von Galileio-Computing gibt's >> jetzt als Download: >> >> http://openbook.galileocomputing.de/c_von_a_bis_z/ > > Das ist jetzt nicht wirklich neu. Das Ding ist doch hier schon vor > Ewigkeiten verrissen worden. > > "5.2 Der Datentyp »int« (Integer) > Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte > aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 > bis +32767 beschreiben." > > Zwei Sätze, zwei Fehler. > > > Stefan > Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler das sind. Dankeschön Dr4x |
|
#4
|
|||
|
|||
|
Dr4x wrote:
> Stefan Reuther schrieb: >> "5.2 Der Datentyp »int« (Integer) >> Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte >> aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 >> bis +32767 beschreiben." >> >> Zwei Sätze, zwei Fehler. > > Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler das > sind. Dankeschön Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in Bytes wird nicht gefordert. Auf dem Motorola 56000 reicht ein Byte, da das dort 24 Bits hat. Letztlich finde ich mit drei Sekunden Suche in meinem Newsspool einen Verriss von 2006, <x3BD65.136*ID-80798.user.dfncis.de>, und beim ersten Überfliegen gilt der noch. Der Fairness halber sei gesagt, dass es durchaus schlechteres gibt als das "openbook"; die Tatsache, dass ein Byte nicht unbedingt 8 Bit haben muss (sonst würde es ja Oktett heißen) wird immerhin erwähnt. Stefan |
|
#5
|
|||
|
|||
|
Stefan Reuther schrieb: > Dr4x wrote: >> Stefan Reuther schrieb: >>> "5.2 Der Datentyp »int« (Integer) >>> Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte >>> aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 >>> bis +32767 beschreiben." >>> >>> Zwei Sätze, zwei Fehler. >> Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler das >> sind. Dankeschön > > Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in > Bytes wird nicht gefordert. Auf dem Motorola 56000 reicht ein Byte, da > das dort 24 Bits hat. Ich habe zwar nicht die große Ahnung, aber wenn mit dem Zweierkomplement http://de.wikipedia.org/wiki/Zweierkomplement gerechnet wird dann ist doch der Wertebereich für 16bit von -32768 bis +32767 da hier die 0 nur positiv angesehen wird. Für mich ist das wichtig zu wissen da ich nichts Falsches lernen möchte. > > Letztlich finde ich mit drei Sekunden Suche in meinem Newsspool einen > Verriss von 2006, <x3BD65.136*ID-80798.user.dfncis.de>, und beim ersten > Überfliegen gilt der noch. Der Fairness halber sei gesagt, dass es > durchaus schlechteres gibt als das "openbook"; die Tatsache, dass ein > Byte nicht unbedingt 8 Bit haben muss (sonst würde es ja Oktett heißen) > wird immerhin erwähnt. > > > Stefan > |
|
#6
|
|||
|
|||
|
Dr4x wrote:
> Stefan Reuther schrieb: >> Dr4x wrote: >>> Stefan Reuther schrieb: >>>> "5.2 Der Datentyp »int« (Integer) >>>> Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von >>>> zwei Byte aufweisen. Mit diesen zwei Bytes lässt sich ein >>>> Zahlenraum von -32768 bis +32767 beschreiben." >>>> >>>> Zwei Sätze, zwei Fehler. >>> Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler >>> das sind. Dankeschön >> >> Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in >> Bytes wird nicht gefordert. Auf dem Motorola 56000 reicht ein Byte, >> da das dort 24 Bits hat. > Ich habe zwar nicht die große Ahnung, aber wenn mit dem > Zweierkomplement http://de.wikipedia.org/wiki/Zweierkomplement > gerechnet wird dann ist doch der Wertebereich für 16bit von -32768 > bis +32767 da hier die 0 nur positiv angesehen wird. Und der Standard legt sich eben nicht aud dieses Zweierkomplement fest. Tschö, Jojo |
|
#7
|
|||
|
|||
|
Dr4x wrote:
^^^^ da fehlt übrigens was. > Stefan Reuther schrieb: >> Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in >> Bytes wird nicht gefordert. Auf dem Motorola 56000 reicht ein Byte, da >> das dort 24 Bits hat. > > Ich habe zwar nicht die große Ahnung, aber wenn mit dem Zweierkomplement > http://de.wikipedia.org/wiki/Zweierkomplement gerechnet wird dann ist > doch der Wertebereich für 16bit von -32768 bis +32767 da hier die 0 nur > positiv angesehen wird. Wie du schon schreibst: *wenn* mit dem Zweierkomplement gerechnet wird. C fordert aber nicht, dass im Zweierkomplement gerechnet wird. Und eh mir hier jemand Pedanterie vorwirft: man kann eine Menge nützlichen Code schreiben, ohne Annahmen wie "ein int hat zwei Bytes" oder "ein Byte hat 8 Bits" oder "Zweierkomplement" zu nutzen. Stefan |
|
#8
|
|||
|
|||
|
Hallo,
Dr4x <Dr4x*gmx.de> wrote: > Stefan Reuther schrieb: >> Dr4x wrote: >>> Stefan Reuther schrieb: >>>> "5.2 Der Datentyp »int« (Integer) >>>> Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte >>>> aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 >>>> bis +32767 beschreiben." >>>> Zwei Sätze, zwei Fehler. >>> Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler das >>> sind. Dankeschön >> Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in >> Bytes wird nicht gefordert. Auf dem Motorola 56000 reicht ein Byte, da >> das dort 24 Bits hat. > Ich habe zwar nicht die große Ahnung, aber wenn mit dem Zweierkomplement > http://de.wikipedia.org/wiki/Zweierkomplement gerechnet wird dann ist > doch der Wertebereich für 16bit von -32768 bis +32767 da hier die 0 nur > positiv angesehen wird. Der C-Standard fordert kein Zweierkomplement. Einerkomplement ist ebenfalls moeglich, und dann waere der Wertebereich bei 16Bit-ints nur -32767 - 32767. Tschuess, Juergen Ilse (juergen*usenet-verwaltung.de) -- Ein Domainname (auch wenn er Teil einer Mailadresse ist) ist nur ein Name, nicht mehr und nicht weniger ... |
|
#9
|
|||
|
|||
|
Juergen Ilse schrieb:
> Hallo, > > Dr4x <Dr4x*gmx.de> wrote: >> Stefan Reuther schrieb: >>> Dr4x wrote: >>>> Stefan Reuther schrieb: >>>>> "5.2 Der Datentyp »int« (Integer) >>>>> Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte >>>>> aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 >>>>> bis +32767 beschreiben." >>>>> Zwei Sätze, zwei Fehler. >>>> Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler das >>>> sind. Dankeschön >>> Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in >>> Bytes wird nicht gefordert. Auf dem Motorola 56000 reicht ein Byte, da >>> das dort 24 Bits hat. >> Ich habe zwar nicht die große Ahnung, aber wenn mit dem Zweierkomplement >> http://de.wikipedia.org/wiki/Zweierkomplement gerechnet wird dann ist >> doch der Wertebereich für 16bit von -32768 bis +32767 da hier die 0 nur >> positiv angesehen wird. > > Der C-Standard fordert kein Zweierkomplement. Einerkomplement ist ebenfalls > moeglich, und dann waere der Wertebereich bei 16Bit-ints nur -32767 - 32767. > > Tschuess, > Juergen Ilse (juergen*usenet-verwaltung.de) Ok, dann sind also die Wertangaben rein abhängig von der Implementierung. |
|
#10
|
|||
|
|||
|
Stefan Reuther wrote:
> Dr4x wrote: >> Stefan Reuther schrieb: >>> "5.2 Der Datentyp »int« (Integer) >>> Der Datentyp int muss, gemäß ANSI C, mindestens eine Größe von zwei Byte >>> aufweisen. Mit diesen zwei Bytes lässt sich ein Zahlenraum von -32768 >>> bis +32767 beschreiben." >>> >>> Zwei Sätze, zwei Fehler. >> >> Da ich auch noch C lerne würde ich gerne wissen welche zwei Fehler das >> sind. Dankeschön > > Der minimale Wertebereich ist -32767 .. +32767. Eine Minimalgröße in > Bytes wird nicht gefordert. Das ist auch unnötig, denn für diesen Wertebereich benötigt man zur dualen Darstellung 16 binäre Stellen -- mithin 16 Bits, die solche Werte effektiv abbilden. Da ein Byte seit mindestens 40 Jahren aus acht Speicherbits besteht, sind also -- genau wie oben geschrieben -- mindestens zwei Bytes für den Datentyp "int" vonnöten. Natürlich kann ein Byte mehr oder weniger als 8 Bits enthalten: die meisten hochwertigen RAM-Riegel benutzen mindestens 1-2 Bits zusätzlich pro 8-bit-Byte, um Speicherfehler zu erkennen oder gar zu beheben (Parity/ECC), ebenso andere Datenträger (von Floppy bis CD/DVD) oder auch UARTs, und bei Microcontrollern (MCUs) kann ein Byte auch mal aus keinem Bit bestehen, oder nur "hier und da" mal einem -- aber wenn es um Datenspeicherung geht, hat ein Byte netto *immer* acht signifikante Bits. > Auf dem Motorola 56000 reicht ein Byte, da > das dort 24 Bits hat. Nein, das ist dort die Größe eines "Maschinenworts", d.h. die kleinste physikalische Bitbreite, mit der die CPU selbst auf den Speicher zugreifen kann. Der 56k ist ein spezialisierter Prozessor (DSP), deshalb machen 24 Bits/3 Bytes als Speicher-Entität Sinn, genau wie bei "jüngeren" Grafikchips (GPUs), die -- wenn auch aus anderen Gründen -- immer vier Bytes adressieren, obwohl sie nur drei davon brauchen (die "ganz modernen" GPUs benutzen das vierte Byte optional für Alpha-Blending-Werte oder auch als Safeguards bei Berechnungen, etc.). > Letztlich finde ich mit drei Sekunden Suche in meinem Newsspool einen > Verriss von 2006, <x3BD65.136*ID-80798.user.dfncis.de>, und beim ersten > Überfliegen gilt der noch. Der Fairness halber sei gesagt, dass es > durchaus schlechteres gibt als das "openbook"; die Tatsache, dass ein > Byte nicht unbedingt 8 Bit haben muss (sonst würde es ja Oktett heißen) > wird immerhin erwähnt. Immerhin! Den zweiten Fehler im zweiten Satz bist Du noch schuldig geblieben, aber der hängt ja auch mit dem ersten eng zusammen, und der ist kein wirklicher Fehler. Für mich kein Grund zum Verriß des Buches, aber ich habe es auch nicht gelesen und mich nur auf Deine Kritikpunkte bezogen. Letztlich kann ein C-Lehrbuch ohnehin auch nur "Erste Hilfe" leisten; entscheidend ist, daß man die Grundlagen versteht, ausprobiert und praktisch übt, und akzeptiert, daß C ein Oberbegriff für eine Sprache ist, die unterschiedliche Compiler-Hersteller nach Belieben und/oder Notwendigkeit ergänzen -- und wie man diese Unterschiede nutzen kann, ohne dabei auf Portabilität zu verzichten! mike |
|
|
|
|