Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Neue Beta (Long Integer) Kategorie: Programmierung C (von UKo - 30.08.2010 16:53)
Als Antwort auf Re: Neue Beta (Long Integer) von PeterS - 30.08.2010 13:17
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > 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


    Antwort schreiben


Antworten:

Re: Neue Beta (Long Integer) (von PeterS - 30.08.2010 17:19)
    Re: Neue Beta (Long Integer) (von UKo - 30.08.2010 18:12)