| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: Problem Umsetzung von C# nach JAVA - unsigned Variablen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Zusammen, ich bin seit einiger Zeit dabei mich nun endlich auch mit JAVA zu beschäftigen. Dazu versuche ich ...
![]() |
| | #1 (permalink) |
| Anzeige Hallo Zusammen, ich bin seit einiger Zeit dabei mich nun endlich auch mit JAVA zu beschäftigen. Dazu versuche ich auch meine "alten" Codeschnippsel in JAVA umzusetzen. Da es in JAVA ja keine unsigned werte gibt wird ja immer geraten auf größere Datentypen zu gehen. Bei folgendem Code verrechnet sich mein Code immer wieder und ich komm einfach nicht dahinter. Bin mittlerweile bis auf BigInteger umgestiegen um negative werte zu vermeiden. C# Code Code:
uint uiInput = 168428516; //0x0a0a03e4;
ulong ulRet = 0;
ulRet = uiInput * (20 * uiInput + 7) / 0x55u + 112;
// Ergebnis 0x0000000001d4f3ec Code: long Input = 0x0a0a03e4l;;
long ulRet = 0;
long step1 = 20 * Input + 7;
BigInteger bStep1 = BigInteger.valueOf(step1);
BigInteger step2 = bStep1.multiply(BigInteger.valueOf(Input));
BigInteger step3 = step2.divide(BigInteger.valueOf(0x55));
BigInteger Step4 = step3.add(BigInteger.valueOf(122));
ulRet = Step4.longValue();
System.out.print(ulRet); Cheerz Mortiis | |
| | |
| | #2 (permalink) |
| Registriert seit: 28.07.08 ![]() Likes: 1 | dein c#-code läuft auch bei 64 32 bit über. BigInteger dagegen wächst dynamisch (hab die doku aber nur überflogen, also nochmal kontrollieren). den überlauf kannst du in java simulieren, indem du nach jeder zwischenoperation mod 2^64 2^32 rechnest. Geändert von ArnoNühm (08.03.11 um 22:37 Uhr) Grund: hab's mal korrigiert um weniger zu verwirren |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() Registriert seit: 28.05.10 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 210 | das ist kein 64 bit überlauf ... das ist ein 32 bit überlauf ... Code: (20 * uiInput + 7) // ist in c# ein 32-Bit Integer Code: (20L * uiInput + 7) // ist der eigentlich vermutete 64 Bit Integer
__________________ Code: :(){ :|:& };: |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |