Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Convert.ToInt32 erzeugt Überlauf (https://www.delphipraxis.net/54053-convert-toint32-erzeugt-ueberlauf.html)

Jens Schumann 27. Sep 2005 09:06


Convert.ToInt32 erzeugt Überlauf
 
Hallo,
mit folgdender Methode möchte ich in einem Integer das Bit an der
Position BitPostion setzen.
Code:
private void SetBit(int BitPosition)
{
 int   BitPositionValue;
 double BitValue;
 // Berechne den Wert für die ODER-Verknüpfung
 BitValue = Math.Exp(BitPosition*Math.Log(2));
 //    BitPositionValue = Convert.ToInt32(BitValue); // <- Convert erzeugt Überlauf
 BitPositionValue = (int) (BitValue); // <- Funktioniert
 FBitValue = FBitValue | BitPositionValue;
}
Wenn ich jetzt für BitPosition den
Wert 31 übergebe soll der Bit 31 gesetzt werden.
Entspricht bei einem 32-Bit Integer -2.147.483.648.

Es passiert jedoch folgendes:

Convert.ToInt32 meldet eine Bereichsüberschreitung
Der einfache Typcast in einem Integer klappt reibungslos.

Evt. gibt es ja auch noch eine bessere Methode um ein Bits zu setzen.

NicoDE 27. Sep 2005 09:44

Re: Convert.ToInt32 erzeugt Überlauf
 
Zitat:

Zitat von Jens Schumann
Entspricht bei einem 32-Bit Integer -2.147.483.648.

$80000000 ist auf diversen Plattformen ein undefinierter Integerwert, insofern wundert mich die Meldung nicht wirklich (auch nicht, dass es mit einem Typecast (Bitmaske) funktioniert).


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 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