[Info]
Aktuelle Zeit: Mo 22. Jan 2018, 05:19

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Fr 14. Mär 2014, 18:32 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
Hallo,

ich muss jetzt für die Uni endlich C programmieren lernen, was mich gleich dazu gebracht hat, mich recht begeistert damit auseinanderzusetzen.
Ich bin irgendwie schon einige Vorlesungen voraus (die Anforderungen sind nicht wirklich hoch), nur bin ich jetzt auf ein Problem gestoßen, das mich etwas verwirrt.

Ich schreibe die Programme momentan in gedit und kompiliere sie per Konsole, gcc.
Je nach Lust und Laune unter Linux (mein Server mit dem aktuellen Debian Release) oder unter OSX (MacBook). Meist unter Letzterem.
Da ich die developer-Tools Xcode installiert habe, kann ich auch am Mac per gcc kompilieren.

Nun habe ich diese Aufgabe bekommen:
Code:
Die Funktion sizeof(x) gibt die Größe eines Variablentyps x wie zum Beispiel float wieder.
Geben Sie für alle  üblichen Variablentypen die Größe aus (short, int, long, long long, float, double (jeweils optional mit dem Schlüsselwort  unsigned). In welchen Einheiten wird die Größe ausgegeben (Kommentar
in den Quellcode)? Welchen maximal moglichen Wert erwarten Sie also fur unsigned short? Testen Sie Ihre
Uberlegung, indem Sie in einer Addition den m  oglichen Bereich leicht uberschreiten


Mein Lösungsansatz (nur den relevanten Abschnitt des Codes für int genommen):
Code:
printf("int: %d Bit\n", sizeof(int)*8);

(*8, damit es Bit werden, keine Byte).

Am Server mit Debian kompiliert gcc mir das durch, das Programm spuckt "32" aus, was auch stimmen sollte.
Am Mac kommt das da:
Code:
Moritz-Plattners-MacBook:src moritzplattner$ gcc -o prog05 prog05.c
prog05.c: In function ‘main’:
prog05.c:5: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘long unsigned int’


Könnt ihr mir sagen, ob mein Mac da spinnt, oder ob ich was falsch mache?
Bzw, würdet ihr das anders lösen?

Danke schonmal für die Hilfe!
Moritz

Edit: Nach dem sizeof sollte ja nur mehr eine kurze Zahl von maximal 8 (bei int 4) da stehen, *8 ergibt das 64, wie kommt der da drauf, dass da eine variable in long unsigned int steht? Hab ich nen Knoten im Kopf, im Programm, oder im Mac?^^

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 14. Mär 2014, 20:04 
Offline

Registriert: Mo 7. Feb 2011, 23:24
Beiträge: 2349
Wohnort: Aachen

Schule/Uni/Arbeit: Student/Elektrotechnik
Wahrscheinlich gibts Probleme mit dem Produkt im Argument
Versuch mal
Code:
 printf("int: %d Bit\n", (int)(sizeof(int)*8));


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 14. Mär 2014, 20:26 
Offline
Benutzeravatar

Registriert: Fr 7. Apr 2006, 14:05
Beiträge: 2525
Wohnort: 65366 Geisenheim (Hessen)

Spezialgebiet: Physik,Elektronik,Blender
Schule/Uni/Arbeit: EIT h_da
Spitzi hat geschrieben:
Wahrscheinlich gibts Probleme mit dem Produkt im Argument
Versuch mal
Code:
 printf("int: %d Bit\n", (int)(sizeof(int)*8));


alternativ geht glaube ich auch %ld statt %d für long? irgend sowas war da mal... ist schon etwas her, seit ich das letzte mal was in C gemacht hab...

_________________
Bild
MFK-Datenblatt-Server:
http://littleserver.spdns.org/Datasheets.php


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 14. Mär 2014, 22:54 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
@Spitzi: Danke, versuch ich danach!
@Marco: Das wär halt nur Symptombekämpfung, eigentlich sollte in dem printf ja sogar ein short schon ausreichen, da ich maximal 64 da stehen hab.
Ich glaub, dass Spitzi das Problem erfasst hat, versuch ich danach.

Dass gcc unter Debian es ohne zu murren durchkompiliert, aber gcc unter OSX nicht, ist n anderes Kapitel...

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 14. Mär 2014, 23:11 
Offline

Registriert: Mo 7. Feb 2011, 23:24
Beiträge: 2349
Wohnort: Aachen

Schule/Uni/Arbeit: Student/Elektrotechnik
Installiere dir doch mit parallels ne VM. Ich arbeite inzwischen auch nur noch mit VMs was Programmierung angeht, da ne Entwicklungsumgebung wie Visual Studio mit den ganzen SDKs und so weiter den PC vollmüllt


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 15. Mär 2014, 00:22 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
Habe eben etwas Interessantes herausgefunden. Ich habe mir den Ordner mal angeschaut, in dem das Programm drin ist - und da war, trotz Fehlermeldung - ein fertig kompiliertes Programm, das auch funktioniert.

Habs nochmal versucht, er bringt den Fehler, kompilierts aber trotzdem durch.
Ab und an sollte man doch die GUI verwenden, oder wenigstens ein ls eintippen...
Ich glaub, ich lass es mal so, und frag meinen Praktikumsleiter am Montag, was er dazu sagt.

In einem Onlinetutorium wirds genau so gelöst wie bei mir, das scheint nicht ganz abwegig zu sein...

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 15. Mär 2014, 11:40 
Offline
Benutzeravatar

Registriert: Mo 27. Jul 2009, 19:19
Beiträge: 242
Wohnort: Linz, OÖ

Spezialgebiet: Procrastination
Schule/Uni/Arbeit: JKU Linz
Ich schätze mal dein Server ist 32 bit und dein Mac 64 bit, kann das sein?
Soweit ich weiß, kann ein int alles mögliche sein, muss aber mindestens 16 bit haben.
Vielleicht ist die 8 mit der du multiplizierst am Server ein 32 bit int und am Mac ein 64 bit long int.

PS: hab das gerade mal probiert, die Größe von (sizeof(int) * 8 ) ist ziemlich unterschiedlich.
Auf einem 64 bit Arch Linux 64 bit, auf einem 32 bit Debian Wheezy 32 bit, auf 64 bit Windows 7 auch 32 bit (kann an Cygwin liegen)...


Zuletzt geändert von Pezo am Sa 15. Mär 2014, 12:12, insgesamt 1-mal geändert.

Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 15. Mär 2014, 12:10 
Offline

Registriert: Mo 7. Feb 2011, 23:24
Beiträge: 2349
Wohnort: Aachen

Schule/Uni/Arbeit: Student/Elektrotechnik
Ich meine Short ist 16bit, Char ist 8Bit (Immer), int ist 32bit, long int 64bit. Unsigned oder nicht macht natürlich keinen Unterschied.


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 15. Mär 2014, 12:49 
Offline
Benutzeravatar

Registriert: Mo 27. Jul 2009, 19:19
Beiträge: 242
Wohnort: Linz, OÖ

Spezialgebiet: Procrastination
Schule/Uni/Arbeit: JKU Linz
Es gibt eigentlich nur eine untere Grenze für die Datentypen:
char 8 bit, short 16 bit, int auch, long 32 bit, und long long 64 bit (siehe Wikipedia und dort Referenzen 7 und 8 ).


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 15. Mär 2014, 14:10 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
Danke, ich hatte gar nicht daran gedacht, dass das je nach Umgebung abweichen kann...
Hier mal die Ausgabe meines Programms:

Code:
short:                       16 Bit
unsigned short:        16 Bit
int:                           32 Bit
unsigned int:            32 Bit
long:                           64 Bit
unsigned long:         64 Bit
long long:                   64 Bit
unsigned long long: 64 Bit
float:                           32 Bit
double:                     64 Bit

Maximalwert unsigned short: 65535
Maximalwert +1: 0


EDIT: Okay, egal, ob ichs mit tab oder Leerzeichen mach, das MFK kriegt das einrücken nicht hin.

Das unsigned musste ich halt dazuschreiben, also gurkts da mit rum, obwohls an der Größe ja nichts ändert. Immerhin, das Programm tut, auch, wenn der Compiler warnings ohne Ende ausspuckt.

Float und Double gibts nicht als unsigned, seh ich das richtig?

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 22. Mär 2014, 00:29 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
Hallo, weiter gehts. Nächste Aufgabe, nächste dämliche Frage ;)

Code:
var1=1; var2=7; var3=5;
   printf("var1 < var2 < var3 = %d\n\n",      var1 < var2 < var3   );


Warum zur Hölle ergibt das 1??

1<7<5 geprintet ergibt 1? Warum zur Hölle?
Das sollte wohl eher eine 0 ergeben, da 7>5, nicht?

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 22. Mär 2014, 00:34 
Offline
Benutzeravatar

Registriert: Fr 7. Apr 2006, 14:05
Beiträge: 2525
Wohnort: 65366 Geisenheim (Hessen)

Spezialgebiet: Physik,Elektronik,Blender
Schule/Uni/Arbeit: EIT h_da
ebastler hat geschrieben:
Hallo, weiter gehts. Nächste Aufgabe, nächste dämliche Frage ;)

Code:
var1=1; var2=7; var3=5;
   printf("var1 < var2 < var3 = %d\n\n",      var1 < var2 < var3   );


Warum zur Hölle ergibt das 1??

1<7<5 geprintet ergibt 1? Warum zur Hölle?
Das sollte wohl eher eine 0 ergeben, da 7>5, nicht?


Ich würd vermuten

1<7<5

1<7 = 1

1<5 = 1

_________________
Bild
MFK-Datenblatt-Server:
http://littleserver.spdns.org/Datasheets.php


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 22. Mär 2014, 00:47 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
Ah, von links nach rechts - einleuchtend.
Ich vergesse immer wieder, dass ich hier mit Logikoperatoren denken muss...

Danke!

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 27. Mär 2014, 19:39 
Offline
Benutzeravatar

Registriert: Fr 18. Dez 2009, 22:18
Beiträge: 605
Wohnort: Alfeld (Leine)

Spezialgebiet: MCUs, HF, IT
Zu dem Unterschied auf dem Mac: Ist das wirklich der Gnu C Compiler? Ich hab irgendwie noch im Hinterkopf dass OSX clang oder LLVM oder sowas an Bord hatte.. (Hast du Xcode installiert? oder ports genutzt?)

_________________
Visit me: tbspace.de


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 28. Mär 2014, 00:41 
Offline
Epic Spam Warrior
Benutzeravatar

Registriert: Di 13. Jul 2010, 22:46
Beiträge: 3229

Spezialgebiet: CW SSTCs
Schule/Uni/Arbeit: Physikstudium
Ich nutz momentan Xcode, die Terminal Tools.
Das sollte, so weit ich weiß, n Gnu C Compiler sein. Jedenfalls ist der Terminal Befehl gcc ;)

_________________
"A condition where insufficient dead time exists is a destructive condition."
Texas Instruments, TL494 Appnote, Kapitel 4.4.2

Du hast einen starken Rechner, brauchst ihn aber nicht immer? Du willst was Gutes tun? Dann falte mit uns!
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Gehe zu:  
cron



Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de

moShBox © 2008, 2009, 2010 mosfetkiller-Community