Hi,
in einem anderen Thread wurde mir bereits sehr gut geholfen, deshalb
möchte ich erneut noch mal um Hilfe bitten.
Aus dem Kernighan & Ritchie Buch über C, Kapitel 2.9 auf Seite 48:
"The bitwise AND operator & is often used to mask off some set of bits;
for example
1
n=n&0177;
sets to zero all but the low-order 7 bits of n."
Das habe ich versucht nachzurechnen/verstehen, scheitere dabei aber. Ich
bin mir nicht sicher, was 0177 bedeutet, interpretiere es aber als die
Zahl 177.
177_dec = 0000000010110001_b
Wenn ich jetzt eine beliebige Zahl n mit 0000000010110001_b
AND-verknüpfe, kann ich nicht sehen, inwiefern die Aussage "sets to zero
all but the low-order 7 bits of n." stimmt. Die oberen 8 bits von 177
sind alle 0. Das verstehe ich. Da sind aber auch Nullen in den unteren 7
bits vorhanden, was diejenigen Bits in n ebenfalls löschen würden.
Missverstehe ich die 0177 Schreibweise aus dem Buch?
Danke
0177_octal -> 0x10 -> 0b10000000
Zu der Zeit als das festgelegt wurde, gab es 12, 18 oder auch 36-Bit
Maschinen, da sind 2, 3 oder 6 Oktalstellen nicht mehr so schräg.
Vielen Dank euch allen. Fun fact:
Das steht sogar an anderer/voriger Stelle im Buch:
"A leading zero on an integer constant means octal;"
Das scheint mir gestern beim Lesen untergegangen zu sein.
Das wird ein langer Weg für mich... :D
Vielen Dank für eure Hilfe.
Gruß,
Du interpretierst die Zahl "0177" falsch.
Siehe das selbe Buch, Kapitel 2.3, Seite 37
"Beginnt eine ganzzahlige Konstante mit 0 (Null), so wird sie in Basis 8
interpretiert; ..."
PittyJ schrieb:> Ist ja cool, dass noch jemand K&R liest.> Ich werde immer doof angeschaut, wenn ich den erwähne. Aber vor 30> Jahren war es das einzige Buch.
Ich greife auch danach, wenn ich ein Verständnisproblem habe. Es ist
mein einziges C-Buch ...
HildeK schrieb:> PittyJ schrieb:>> Ist ja cool, dass noch jemand K&R liest.>> Ich werde immer doof angeschaut, wenn ich den erwähne. Aber vor 30>> Jahren war es das einzige Buch.>> Ich greife auch danach, wenn ich ein Verständnisproblem habe. Es ist> mein einziges C-Buch ...
Hi PittyJ und HildeK,
ich lese den K&R, weil er in vielen Foren bezüglich C hoch gelobt wird.
Allerdings weiß ich (noch) nicht, ob ich den Hype für dieses Buch
nachvollziehen kann. Es ist sicherlich ein gutes Buch, keine Frage. Aus
pädagogischer Sicht würde ich mir allerdings einiges im Buch anders
wünschen, da mir als Anfänger bei vielen (scheinbar wichtigen) Sätzen
entsprechende Beispiele fehlen. So ist es oftmals, dass ich die
Wichtigkeit bestimmter Sätze nicht erkenne, weil eben dieser Satz
einfach nur als ein Satz neben vielen Sätzen steht, der dann 10 Seiten
später ohne Vorwarnung/Erläuterung in einem Beispiel verwendet wird.
Beispiel:
Im Buch bis Seite 48 wurde kaum bis gar nicht auf die binäre
Schreibweise eingegangen, obwohl es die Grundlage für die
Zahlendarstellung auf Computern ist, und entsprechend sehr wichtig fürs
Verstehen der bitweisen Operationen
1
n=n&0177;
.
Für einen Anfänger wäre es sicherlich hilfreich, drei Sätze und ein
detailiertes Beispiel dafür zu verwenden, den Satz "sets to zero all but
the low-order 7 bits of n" verständlicher zu machen.
Hätte ich vor einigen Jahren nicht bereits die Artikel über
Bitmanipulation hier auf uC.net gelesen, wäre ich nicht auf die Idee
gekommen, die Zahlen ins binäre System umzuwandeln und dann eine AND
Verknüpfung auf Papier durchzuführen.
Aber ja, der K&R bleibt erstmal meine Primärreferenz und
Internetartikel/Youtube als weiterführende Quelle.
Wie seht ihr das? Mich würde eure Meinung diesbezüglich interessieren.
Gruß,
Ich glaube nicht dass so ein altes Buch heutzutage benutzt werden
sollte. Ja, irgendwann mal ein paar mal überfliegen. Aber nicht als ein
Anfänger aus dem Jahre 2018.
Was soll man heutzutage mit dem Code
main(){
}
denn anfangen?
Hier ist z.B. ein kostenloses Buch.
"C von A bis Z"
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
PittyJ schrieb:> Ist ja cool, dass noch jemand K&R liest.
Eher traurig, dass es heute noch Menschen gibt die mit K&R C lernen. Als
historisches Dokument ganz nett, aber C hat sich nun mal weiter
entwickelt.
Peter S. schrieb:> Eher traurig, dass es heute noch Menschen gibt die mit K&R C lernen. Als> historisches Dokument ganz nett, aber C hat sich nun mal weiter> entwickelt.
Welches Buch würdest du denn empfehlen?
Gruß,
Hallo,
zitter_ned_aso schrieb:> Das Buch hat 1000 Seiten!
Die Qualität eines Buches bemisst sich nicht nach der Anzahl seiner
Seiten!
rhf
P.S.:
Das Problem bei K&R ist eher die Tatsache, das es fast 30 Jahre alt ist
und seit dem nicht mehr überarbeitet wurde. Trotzdem halte ich es für
eines der besten Lehrbücher die ich bisher gelesen habe. Aber es fehlt
halt was in der Zwischenzeit dazu gekommen ist und einige Dinge sind
(wie z.B. die oktale Zahlendarstellung) überholt.
Roland F. schrieb:> Das Problem bei K&R ist eher die Tatsache, das es fast 30 Jahre alt ist
Falls die Ausgabe von 1988 gemeint ist, nicht die von 1978. ;-)
Der K&R ist nicht für absolute Programmieranfänger geeignet.
Es ist aber die Referenz für C.
Die zweite Ausgabe beschreibt auch schon ANSI-C (C89)
Die Neuerungen danach sind aber kein Problem, da es keine großartigen
Änderungen an der Sprache gab.
Das vorgeschlagene online Buch hat zuviele Fehler.
Hallo,
Dirk B. schrieb:> Das vorgeschlagene online Buch hat zuviele Fehler.
Das Buch kenne ich zwar nicht, aber ich habe mir mal ein anderes Buch
dieses Autor gekauft (Grundkurs C) und mir auch andere Bücher von ihm
angesehen. Ich kann diesen Autor nicht empfehlen.
rhf
Roland F. schrieb:>> Das vorgeschlagene online Buch hat zuviele Fehler.>> Das Buch kenne ich zwar nicht, aber ich habe mir mal ein anderes Buch> dieses Autor gekauft (Grundkurs C) und mir auch andere Bücher von ihm> angesehen. Ich kann diesen Autor nicht empfehlen.
Kurz reingeschaut und direkt einen Fehler gefunden:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/005_c_basisdatentypen_002.htm#mj05627afe3c1e67ed50a71e2429f9aadb>Ein int hat somit laut Standard die natürliche Größe, die von der
»Ausführ-Umgebung« vorgeschlagen wird. Das wären dann z. B. auf einer
PDP10-Maschine 36 Bit, auf einem Pentium 4 32 Bit und auf einem beliebigen
64-Bit-Prozessor-System eben 64 Bit.
Wenn der Rest des Buchs eine ähnliche Qualität hat, wie dieses Kapitel,
dann ist es unbrauchbar.
Fehlerhaft schrieb:> Wenn der Rest des Buchs eine ähnliche Qualität hat, wie dieses Kapitel,> dann ist es unbrauchbar.
Woran störst Du Dich denn. An den 64Bit? Oder gar an den 36? Für einen
Anfänger als Ausflug in die "es ist nicht alles 4 Byte was int ist"-Welt
ist das für mich OK.
A. S. schrieb:> Woran störst Du Dich denn. An den 64Bit?
Vermutlich. Die Behauptung, auf 64-Bit-Systemen sei ein int immer 64 Bit
breit, ist ziemlich falsch. Tatsächlich ist ein 64-bittiger int eher
unüblich.
Tatsächlich ist es in C so, dass int der natürlichen Breite der
Plattform entsprechen sollte, erzwingt das aber nicht. Bei
64-Bit-Plattformen weicht man davon ab, weil sonst nicht mehr genügend
kleinere Typen übrig sind.
> Bei 64-Bit-Plattformen weicht man davon ab, weil sonst nicht mehr> genügend kleinere Typen übrig sind.
..ich wollte schon immer Datentypen wie 'damn short int' und 'longish
short int' haben ;-)
SCNR
So ähnlich. Analog zu "long long int" für 64 Bits bei LLP64 (Windows)
gibts dann eben bei ILP64 "short short int" für 16 Bits und "long short
int" für 32 Bits. Dieses Prinzip ist beliebig ausbaufähig.
(1) Der Witz ist, dass der Autor sogar selbst auf diesen Fehler
hinweist: "Doch Vorsicht, Folgendes funktioniert nicht:". Nur hat er
keine Ahnung, wie strtok arbeitet, und macht exakt diesen Fehler selbst.
(2) Wird so viel eingegeben, dass es fürs Newline nicht reicht, gibt
strtok NULL zurück, die aufrufende Funktion rechnet aber nicht damit.
Peter S. schrieb:> Eher traurig, dass es heute noch Menschen gibt die mit K&R C lernen. Als> historisches Dokument ganz nett, aber C hat sich nun mal weiter> entwickelt.
Was ist denn daran traurig?
Walter K. schrieb:> Was ist denn daran traurig?
Na ja, wenn einer sagt "Ich fahre einen VW und suche eine
Reparaturanleitung" dann wird wohl kaum jemand mit dem Satz kommen wie
"Lies mal das Reparaturbuch für den VW-Käfer aus dem Jahre 1955 durch".
30 Jahre im IT-Bereich? Das ist doch eine Ewigkeit.
zitter_ned_aso schrieb:> Kann diese Aussage die Lösung sein?
Die klassische Implementierung von strtok verwendet keinen separaten
Puffer, sondern modifiziert den übergebenen String. Der Aufruf von
strtok sucht also nach dem \n, schreibt dort \0 rein und übergibt die
Adresse von input[]. Macht also exakt das, von dem er schreibt, dass das
ein Fehler ist.
Es hilft allerdings sehr, die Implementierung von strtok mal gesehen zu
haben, denn man muss manche Doku von strtok schon sehr gründlich lesen,
um das zu erkennen. Findest du es hier?
http://www.cplusplus.com/reference/cstring/strtok/
Da der zweite Aufruf (hier nicht verwendet) kein input[] kriegt, sondern
NULL, hat strtok ein eigene statische Variable, die nach dem ersten
Aufruf auf die Stelle hinter dem reingeschriebenen \0 zeigt. Es ist
diese Variable, die strtok nicht tread-safe macht, und zu strtok_r
führte. Nicht der String selbst.
zitter_ned_aso schrieb:> Na ja, wenn einer sagt "Ich fahre einen VW und suche eine> Reparaturanleitung" dann wird wohl kaum jemand mit dem Satz kommen wie> "Lies mal das Reparaturbuch für den VW-Käfer aus dem Jahre 1955 durch".
Auf C bezogen ist der aktuelle VW baugleich mit dem Käfer von 1955, nur
dass noch Sicherheitsgurte und eine dritte Bremsleuchte hinzugekommen
sind.
Die Reparaturanleitung von 1955 wurde von den Entwicklern des Käfers
höchstpersönlich in einem klaren und eindeutigen Stil verfasst, setzt
allerdings voraus, dass der Leser weiß, wie herum eine Schraube aus- und
eingedreht wird. Will man den Sicherheitsgurt oder die dritte
Bremsleuchte reparieren (beiden gehen aber nur selten kaputt), muss man
sich die Anleitung dazu leider aus anderer Quelle (bspw. im Internet)
besorgen.
Der Autor der aktuellen Version hat leider keinen so tiefen Einblick in
die Technik des Käfers, was man der Anleitung anmerkt. Dafür geht er
auch auf die neu hinzugekommenen Fahrzeugteile ein und behandelt
Grundlagenthemen wie bspw. den Unterschied zwischen Recht- und
Linksgewinden bei Schrauben, eine Beschreibung der zu den verschiedenen
Schraubenköpfen passenden Werkzeugen u.v.m. Das lässt die Dicke des
Buchs auf ein Vielfaches anschwellen.
Am Ende muss jeder selber entscheiden, welche der beiden Anleitungen er
bevorzugt.
Alexander schrieb:> Peter S. schrieb:>> Eher traurig, dass es heute noch Menschen gibt die mit K&R C lernen. Als>> historisches Dokument ganz nett, aber C hat sich nun mal weiter>> entwickelt.>> Welches Buch würdest du denn empfehlen?
"Modern C" von Jens Gustedt ist recht gut. Aber eventuell nicht ganz
anfängergeeignet. Aber wenn ich eine Frage zu C habe, lese ich
normalerweise den Standard (zur Zeit N2310).
Philipp Klaus K. schrieb:> Aber wenn ich eine Frage zu C habe, lese ich> normalerweise den Standard (zur Zeit N2310).
Der ist ja noch weniger geeignet C zu lernen.
Wenn man C gut kann, dann ist der Standard ok.