Re: Neue Beta (Long Integer) Kategorie: Programmierung C (von PeterS - 30.08.2010 17:19) | |
Als Antwort auf Re: Neue Beta (Long Integer) von UKo - 30.08.2010 16:53
| |
> > > Hallo Peter, > > > ich war richtig happy, dass die neue beta jetzt long Variablen anbietet. > > > Ich gehe mal davon aus, dass bei long-Ausdrücken int oder word Anteile in long gewandelt werden. > > > Die Hilfe sagt dazu (noch?) nix. > > > Das scheint aber nur manchmal zu funktionieren. > > > > > > folgendes geht nicht: > > > long L; > > > word W; > > > > > > W=15; > > > L= 20000 + W * 1000; ==> ergibt -30536 > > > ------------------------------------- > > > so geht es: > > > long L; > > > word W; > > > > > > W=15; > > > L= 20000; > > > L= L + W * 1000; ==> ergibt 35000 > > > ------------------------------------ > > > so geht es auch: > > > unsigned long L; > > > word W; > > > > > > W=15; > > > L= 20000; > > > L= L + W * 1000; ==> ergibt auch 35000 > > > ------------------------------------------ > > > Gruss > > > Ulrich > > > > Hallo Ulrich, > > > > der default ist (wie bei C auch) immer int. Wenn bei der Arithmetik einer der beiden > > Operanden einen "höheren" Typ hat, wird es in long umgewandelt. Dies ist bei > > "20000 + W * 1000" aber nicht der Fall. Der Ausdruck funktioniert dann, wenn entweder W > > vom Typ long ist, oder Du 1000L oder 20000L bei ein der der Konstanten schreibst. > > > > So wird aber "20000 + W * 1000" als integer Ausdruck ausgewertet und dann einem long > > zugewiesen. > > > > Gruss Peter > > Hallo Peter und Jörg, > Danke für die Hinweise! > Der Ausdruck lautete im Original: > > respLong = ascWord(response[1])*16 + ascWord(response[2]); > if (i >= 6){ > respLong=respLong + ascWord(response[3])* 4096 + ascWord(response[4])* 256; > } > if (i == 8) { > respLong=respLong + ascWord(response[5])* 1048576 + ascWord(response[6]) * 65536; > } > > ascWord wandelt ein ASCII char in ein word > respLong ist vom Typ long. > > Frage: Ist es jetzt ausreichend in e i n e m der Summanden pro Zeile hinter die Konstante > (z.B. 4096) ein l zu schreiben oder muss das bei jedem Summanden so sein( auch 256l)? > > Gruss Ulrich Da "*" Prezedenz über "+" hat, mu� das "L" bei 4096 und 256 sein. Eleganter wird ascWord zu ascLong. 65536 und 1048576 werden natürlich automatisch in longs verwandelt. Gruss Peter | |
Antwort schreiben Antworten: Re: Neue Beta (Long Integer) (von UKo - 30.08.2010 18:12) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum