le compileur schrieb:> :-*
Meinst du der Compiler erkennt die 8 Zahlen nicht als Bits?
Sollte ich statt dessen senden: SendUart(141);
Hätte gedacht das kann der C Compiler...müsste man dann noch was vor die
8 Bits schreiben, wenn man wirklich "Bits" schreiben möchte?
Johannes schrieb:> Meinst du der Compiler erkennt die 8 Zahlen nicht als Bits?
Nö, wie denn? 10001101 ist erstmal die Zahl
Zehnmillioneneintausendeinhundertundeins.
Für Zahlenformate kannst Du außer der Dezimalsystemschreibweise:
0123 führende Null -> Oktahlzahl
0x1234 führendes 0x -> Hexadezimalzahl
verwenden.
Für den gcc wurde mal die Erweiterung
0b010101 führendes 0b -> Dualzahl
eingebaut. Soviel ich weiß, ist das aber kein Standard.
> Sollte ich statt dessen senden: SendUart(141);
Ja. Oder halt 0b10001101
> Hätte gedacht das kann der C Compiler...
Ist er ein Hellseher? Wie soll ich denn dann
Zehnmillioneneintausendeinhundertundeins schreiben?
> müsste man dann noch was vor die> 8 Bits schreiben, wenn man wirklich "Bits" schreiben möchte?
Ja, siehe oben.
Ich empfehle Dir die Lektüre eines guten C-Buchs. Du hast schon Lücken
in den Grundlagen.
Naja ein Hellseher müsste er ja nicht sein, ich gebe ihm 8 Zahlen für
eine uint8_t
Da könnte man vermuten ich möchte Bits senden,
Aber habe ich jetzt verstanden.
Aber er hätte mir stattdessen wenigstens eine Warnung ausgeben können,
dass er die Zahl Zehnmillioneneintausendeinhundertundeins nicht in eine
uint8 schreiben kann;)
Vielen Dank für die Hilfe :)
Johannes schrieb:> Da könnte man vermuten ich möchte Bits senden,
Wenn ein Compiler "vermutet", dann ist man als Programmierer verratzt
und verkauft. Es gibt klare Standards, die erklären, wie ein C-Compiler
sich verhalten muss.
> Aber er hätte mir stattdessen wenigstens eine Warnung ausgeben können,> dass er die Zahl Zehnmillioneneintausendeinhundertundeins nicht in eine> uint8 schreiben kann;)
Er kann durchaus Zehnmillioneneintausendeinhundertundeins in ein uint8_t
schreiben. Es werden dann nur die untersten 8 Bit der Zahl gespeichert.
Das ist so beabsichtigt und C-Standard. Ich sagte ja: Dir fehlen
wichtige Grundlagen.
Eine Warnung erhältst Du aber beim gcc, wenn Du die Option -Wall
benutzt:
warning: large integer implicitly truncated to unsigned type
Ok jetzt habe ich es verstanden...
kannst du mir eine lektüre zu genau dem Thema Bits & Co empfehlen?
Ich denke mit normalen Grundlagenbüchern werde ich keine Freude haben.
Ich lerne seit 3 Semestern C und seit 2 C++ an der Hochschule.
Das mit den Bits war bisher das einzige was mir gefehlt hat.
Und auch hier war es denk nur ein Denkfehler.
Gibt es eine Seite die sich mit dem Thema Bits beschäftigt?
Es gibt eine Seite im Nettz, die massenweise nützliche "Bit Routinen"
und Makros bereit stellt, wie zb Spiegeln eines Bytes, rotieren über 64
Bit usw. Habe mich nur leider danach tot gesucht die wieder zu finden.
>>Das heisst nichts. Es gibt Leute, die programmieren seit Jahren in C und>>lernen immer noch dazu
Seit über 20 Jahren und trotzdem immer wieder was Neues :-)
Christian J. schrieb:> Es gibt eine Seite im Nettz, die massenweise nützliche "Bit> Routinen"> und Makros bereit stellt, wie zb Spiegeln eines Bytes, rotieren über 64> Bit usw. Habe mich nur leider danach tot gesucht die wieder zu finden.>>>>Das heisst nichts. Es gibt Leute, die programmieren seit Jahren in C und>>>lernen immer noch dazu>> Seit über 20 Jahren und trotzdem immer wieder was Neues :-)
Ich hab ja noch lange Zeit in meinem Leben :D
Ich denke nur immer, Learning by Doing ist besser als sich 100 Bücher
durchzulesen...
Wäre cool wenn jemand die Seite kennt und sie hier reinstellt.
Würde denk für Viele hilfreicht sein.
Johannes Jaeger schrieb:> Ich denke nur immer, Learning by Doing ist besser als sich 100 Bücher> durchzulesen...
Das halte ich für einen Irrglauben. Die Grundlagen sollte man sich schon
systematisch aneignen. Dann kann man ja auf die Spielwiese gehen. Aber
solange die Grundlagen nicht sitzen, kannst Du das Potential (gerade bei
C) überhaupt nicht voll nutzen. Die Zeit, die Du fürs Lernen verbringst,
holst Du dann später locker wieder raus.
Johannes schrieb:> Aber er hätte mir stattdessen wenigstens eine Warnung ausgeben können,> dass er die Zahl Zehnmillioneneintausendeinhundertundeins nicht in eine> uint8 schreiben kann;)
Wenn ich das kompiliere:
1
#include<stdlib.h>
2
#include<stdio.h>
3
#include<stdint.h>
4
5
6
voidf(uint8_ti)
7
{
8
printf("%u\n",(unsigned)i);
9
}
10
11
12
intmain(intnargs,char**args)
13
{
14
f(10010001);
15
16
return0;
17
}
bekomme ich:
1
klwa4731@eso1188 ~ $ gcc t.c
2
t.c: In Funktion »main«:
3
t.c:14:3: Warnung: Große Ganzzahl implizit auf vorzeichenlosen Typen abgeschnitten [-Woverflow]
Johannes schrieb:> Ich denke mit normalen Grundlagenbüchern werde ich keine Freude haben.> Ich lerne seit 3 Semestern C und seit 2 C++ an der Hochschule.
Du solltest an der Vorlesung und den Seminaren teilnehmen. Die 5
Semester im Bistro schaffen keine Grundlagen.
Und wenn C++ zur Verfügung steht, solltest du es auch benutzen. Der
schluckt auch C code, hat aber eine Typ Prüfung. Genau das, was du
brauchst.
Johannes schrieb:>> Hätte gedacht das kann der C Compiler...müsste man dann noch was vor die> 8 Bits schreiben, wenn man wirklich "Bits" schreiben möchte?
Und das ist Komedy vom Feinsten. :'(
le compileur schrieb:> Und wenn C++ zur Verfügung steht, solltest du es auch benutzen. Der> schluckt auch C code, hat aber eine Typ Prüfung. Genau das, was du> brauchst.
Jemandem der grundlegendes an C nicht verstanden hat, würde ich jetzt
nicht unbedingt C++ andrehen. Das ist immerhin eine der komplexesten und
verworrensten Programmiersprachen überhaupt. Da gibt es so viele
Fallstricke, die kann man kaum noch zählen.
Und es ist auch recht kühn zu behaupten C hätte gar keine Typsicherheit.
Grundlegende Typsicherheit gibt es doch. Darüber hinaus warnen viele
Compiler vor gefährlich anmutenden Konstrukten.
Also wie auch immer, meine Empfehlung lautet: erstmal richtig C lernen.
:)
@drama
D e r C++ C o p i l e r ü b e r s e t z t a u c h C c o d e. Und
er hat eine T y p e p r ü f u n g.
Bei C++ kommt man auch nicht auf die Idee, dass der Compiler was
schätzt. ;-)
le compileur schrieb:> D e r C++ C o p i l e r ü b e r s e t z t a u c h C c o d e.
Leider nicht so richtig. Da gibt es eben doch einige elementare
Unterschiede, die C-Code inkompatibel zu C++ machen können. Gerade wenn
man auch die neueren C-Standards wie C99 und C11 einbezieht.
C-Code einfach so mit einem C++-Compiler zu übersetzen ist ein Hack.
Also ich werde jetzt mal mit C weitermachen ;)
Schlagt euch nicht die Köpfe ein ;)
Achja, im Bistro ware ich bisher nie während der Informatik Vorlesung ;)
Jo schrieb:> Also ich werde jetzt mal mit C weitermachen ;) Schlagt euch nicht> die Köpfe ein ;)>> Achja, im Bistro ware ich bisher nie während der Informatik Vorlesung ;)
Ja, mach mit C weiter, aber lass den C code über den C++ Compiler
laufen.
Es kann nur besser werden. ;-)