INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
was heist 15UL ??
27.09.2016, 12:26 (Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2016 12:27 von DL1AKP.)
Beitrag #1
was heist 15UL ??
Hallo Leute,

habe einen Beispielcode-Fetzen, den ich gern verstehen will.
Dabei bin ich über diese Codezeile gestolpert:

const unsigned int Timeout = 15UL;

Was bedeutet das? Habe schon gelesen im Netz, aber mit der englischen erklärung kann ich nichts anfangen...
UL soll "unsigned long" heissen - aber es steht doch vorn unsigned int...

Kann mir das einer verständlich erklären? Oder kann ich das UL einfach weglassen?

Danke vielmals.
Andy
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 13:01
Beitrag #2
RE: was heist 15UL ??
(27.09.2016 12:26)DL1AKP schrieb:  const unsigned int Timeout = 15UL;

UL soll "unsigned long" heissen - aber es steht doch vorn unsigned int...

Kann mir das einer verständlich erklären? Oder kann ich das UL einfach weglassen?

Ja, das stimmt und hier kannst du es weglassen.

Wichtig ist es u.a. bei Berechnungen, wenn größere Zahlen zum Tragen kommen.
Dann muss aber tatsächlich auch vorweg "unsigned Long" stehen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 16:54
Beitrag #3
RE: was heist 15UL ??
Wenn du eine Variable deklarierst die einen Typen (int, char, unsigned int, etc.) hat, kannst du das weglassen, da der Bereich definiert ist:
Code:
unsigned int var = 5U; // unnötig ->
unsigned int var = 5;
long var = 5L; // unnötig
usw...

Wenn du dann aber mal sowas hier hast:
Code:
var = (15000 * 20000) / 9375;
wäre theoretisch: 300.000.000 / 9.375 = 32.000
Diese 300.000.000 passen aber nicht in den Bereich (-32.768 bis +32.768) von einem int (bei blanken Zahlen wird meist ein int angenommen) und es könnte ein Overflow entstehen, d.h. das Ergebnis wäre ganz was anderes.

Wenn du aber
Code:
var = (15000UL * 20000UL) / 9375;
verwendet ist das 1. Zwischenergebnis (300.000.000) im Bereich des "UL = unsigned long" (0 - ~4.300.000.000) und kein Overflow kann passieren.

Das gleiche kann man auch anders machen (vielleicht für manche verständlicher/übersichtlicher):
Code:
var = ((unsigned long) 15000 * (unsigned long) 20000) / 9375;
D.h. den Typ (int, unsigned int, char, etc.) in Klammern vor der Zahl schreiben (= Typecast).

Evtl. erkennt der Kompiler solche Stellen und kann selbstständig korrigieren, man ist aber auf der sicheren Seite wenn man den "Bereich definiert". Smile

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 16:59
Beitrag #4
RE: was heist 15UL ??
Ahh.... Super Erklärung!

Vielen Dank!
Ja es ist so eine Berechnung noch im Code, wo es über die int hinaus geht!
Jetzt verstehe ich auch den Ablauf im Code.

Super, wieder was gelernt:Idea

Grüße, Andy


(27.09.2016 16:54)Scheams schrieb:  Wenn du eine Variable deklarierst die einen Typen (int, char, unsigned int, etc.) hat, kannst du das weglassen, da der Bereich definiert ist:
Code:
unsigned int var = 5U; // unnötig ->
unsigned int var = 5;
long var = 5L; // unnötig
usw...

Wenn du dann aber mal sowas hier hast:
Code:
var = (15000 * 20000) / 9375;
wäre theoretisch: 300.000.000 / 9.375 = 32.000
Diese 300.000.000 passen aber nicht in den Bereich (-32.768 bis +32.768) von einem int (bei blanken Zahlen wird meist ein int angenommen) und es könnte ein Overflow entstehen, d.h. das Ergebnis wäre ganz was anderes.

Wenn du aber
Code:
var = (15000UL * 20000UL) / 9375;
verwendet ist das 1. Zwischenergebnis (300.000.000) im Bereich des "UL = unsigned long" (0 - ~4.300.000.000) und kein Overflow kann passieren.

Das gleiche kann man auch anders machen (vielleicht für manche verständlicher/übersichtlicher):
Code:
var = ((unsigned long) 15000 * (unsigned long) 20000) / 9375;
D.h. den Typ (int, unsigned int, char, etc.) in Klammern vor der Zahl schreiben (= Typecast).

Evtl. erkennt der Kompiler solche Stellen und kann selbstständig korrigieren, man ist aber auf der sicheren Seite wenn man den "Bereich definiert". Smile

mfg Scheams
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste