Forum: PC-Programmierung short und int


von newbie (Gast)


Lesenswert?

hi,
ich versuche mich gerade ein wenig in c# mit VS2008.
Wieso mag C# Beispiel A nicht und akzepiert Beispiel B ohne mucken!?

Die Variablen "Register" und "n" sind beide als ushort deklariert!

Beispiel A
1
Register = (0x1800 + n);

Beispiel  B
1
Register = n;
2
Register += 0x1800;

von newbie (Gast)


Lesenswert?

ach entschuldigung,
als Bezugnahme zum Threadtitel:

Ich bekomme beim compilieren folgende Fehlermeldung

------------------
Fehler  1 Der Typ "int" kann nicht implizit in "ushort" konvertiert 
werden. Es ist bereits eine explizite Konvertierung vorhanden. 
(Möglicherweise fehlt eine Umwandlung.)
------------------

ich verstehe überhaupt nicht wieso Visual Studio sich hier auf int 
bezieht!?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> ich verstehe überhaupt nicht wieso Visual Studio sich hier
> auf int bezieht!?

Welchen Typ hat die Konstante 0x1800? Solange Du das nicht explizit 
anders hinschreibst, ist das ein int.

von (prx) A. K. (prx)


Lesenswert?

Der Ausdruck (0x1800 + n) dürfte implizit vom Typ "int" sein.

von D. I. (Gast)


Lesenswert?

0x1800 + n bedeutet er castet n auf ein int da 0x1800 als int 
interpretiert wird und das gesamt ergebnis int kann nicht auf ushort 
implizit gecastet werden wegen genauigkeitsverlust.

In Beispiel b wird ein ushort auf ein ushort gesetzt und bei der 
addition anschließend interpretiert er den wert 0x1800 automatisch als 
ushort

von newbie (Gast)


Lesenswert?

okay stimmt!
wenn ich ein Typenumwandlung benütze fünktioniert es
1
Register = (ushort) (0x1800 + n);

nimmt VS also für Zahlenwerte standardmäßig ersteinmal ein int als typ!?
Ich muss mir das mit den Variablentypen offensichtlich nochmal 
asnschauen!

Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Würdest Du die Konstante 0x1800 bereits als unsigned hinschreiben, 
könntest Du Dir den cast sparen.

Für die Typisierung von numerischen Konstanten sind Suffixe zuständig, 
die hinter den Wert der Konstanten geschrieben werden, also z.B. 
0x1800U.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.