Mixing signed expressions

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Vbxler
Beiträge: 125
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

Mixing signed expressions

Beitrag von Vbxler »

Hallo an Alle!
Ich habe bei einem äterem Programm folgende Funktion verwendet:

Code: Alles auswählen

  function Konvert(const B: byte): word;
  begin
    Result:=(B and $0F) + ((B shr 4) * 10);
  end;
Die Arithmetische Operation '+' wird mit dem Hinweis versehen:
'Hint: Mixing signed expressions and longwords gives a 64bit result'

Wie kann ich das anders schreiben, oder passt das so?

Danke für eure Hilfe!
Vbxler
-------------------------

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Mixing signed expressions

Beitrag von Socke »

Vbxler hat geschrieben:Wie kann ich das anders schreiben, oder passt das so?

Du kannst das prinzipiell verwenden; die Operation arbeitet aber mit 64-Bit Integer, sodass dies nur in 64-Bit-Programmen effizient abläuft.

Alternativ:

Code: Alles auswählen

function Konvert(const B: byte): word;
begin
  Result:=(B and $0F) + (Byte(B shr 4) * 10);
end;

Hier wird keine Warnmeldung ausgegeben; ich gehe davon aus, dass der Compiler für B shr 4 den Typ SmallInt festlegt (warum auch immer).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: Mixing signed expressions

Beitrag von wp_xyz »

Code: Alles auswählen

  Result:=word(B and $0F) + ((B shr 4) * 10);

Vbxler
Beiträge: 125
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

Re: Mixing signed expressions

Beitrag von Vbxler »

Vielen Dank für eure tolle Hilfe!

Mit Word(); kommt keine Meldung mehr.
Vbxler
-------------------------

Antworten