AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu 2 Bytes

Ein Thema von Pseudemys Nelsoni · begonnen am 11. Apr 2004 · letzter Beitrag vom 11. Apr 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Frage zu 2 Bytes

  Alt 11. Apr 2004, 18:17
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
Mario
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zu 2 Bytes

  Alt 11. Apr 2004, 18:25
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Frage zu 2 Bytes

  Alt 11. Apr 2004, 18:25
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4

Re: Frage zu 2 Bytes

  Alt 11. Apr 2004, 18:27
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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Frage zu 2 Bytes

  Alt 11. Apr 2004, 18:30
Danke Leute, ich werds nochn paar mal durchlesen *gg*,

auch dir danke, d3g, das hilft mir schon weiter
Mario
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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