Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frage zu 2 Bytes (https://www.delphipraxis.net/19953-frage-zu-2-bytes.html)

Pseudemys Nelsoni 11. Apr 2004 17:17


Frage zu 2 Bytes
 
hallö,

sagen wir mal ich habe ein Smallint und fülle die 2 bytes mit dem wert "3":

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: SmallInt;
begin
  FillChar(i, SizeOf(i), 3);
  ShowMessage(IntToStr(i));
end;
so zeigt mir showmessage "771" an.

In meinem Buch steht das die Rechning folgende ist:

Zitat:

3+256*3
kann mir jemand diese rechnung GENAU erklären?

ich versteh zum beispiel nicht wieso 2mal 3, also einmal *3 und einmal +3

Christian Seehase 11. Apr 2004 17:25

Re: Frage zu 2 Bytes
 
Moin Pseudemys Nelsoni,

mit Deinem FillChar füllst Du jedes Byte des Smallint Wertes mit 3.

Hex Dez
0303 = 0*16^3 + 3*16^2 + 0*16^1 + 3*16^0 = 0 + 768 + 0 + 3 = 771

Chewie 11. Apr 2004 17:25

Re: Frage zu 2 Bytes
 
Mit FillChar füllst du jedes Byte mit der Zahl, die du angegeben hast, also in diesem Fall 3 (oder 11 binär)


Also, unsere 2 Byte sehen so aus:

Code:
00000011 00000011
Wenn man das zusammenzählt, gibt es 1 * 2^0 + 1* 2^1 + 1 * 2^8 + 1 * 2^9 = 3 + (778) = 3 + 256 * 3.

Oder anders: Da das erste Byte (das höherwertigere Byte) 8 Bit nach links verschoben ist, musst du die Zahl mit 2^8=256 multiplizieren. Das rechte Byte ist um 0 Bit verschoben. 2^0=1, also bleibt die Zahl unverändert.
Hättest du drei Byte, müsstest du rechnen 3 + (2^8 * 3) + (2^16 * 3) = 3 + 256 * 3 + 65536 * 3.

d3g 11. Apr 2004 17:27

Re: Frage zu 2 Bytes
 
Also, du hast einen Smallint. Ich stelle ihn jetzt mal in Big Endian dar:

Code:
Wertigkeit  256^1 256^0
--------------------------
Ziffer          0     0
Zwei Nullen stehen also für ein Byte. Du schreibst jetzt jetzt in jedes einzelne Byte eine 3 statt eine 0.

Code:
Wertigkeit  256^1 256^0
--------------------------
Ziffer          3     3
Damit ist die Zahl, die du bekommst, im Dezimalsystem 3*256^1 + 3*256^0 = 768 + 3 = 771.

PS. Zur Verdeutlichung nochmal eine Zahl im Dezimalsystem:

Code:
Wertigkeit  10^2 10^1 10^0
-----------------------------
Ziffer         7    7    1
7*10^2 + 7*10^1 + 1*10^0 = 700 + 70 + 1 = 771

Pseudemys Nelsoni 11. Apr 2004 17:30

Re: Frage zu 2 Bytes
 
Danke Leute, ich werds nochn paar mal durchlesen *gg*,

auch dir danke, d3g, das hilft mir schon weiter :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz