Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Problem Umsetzung von C# nach JAVA - unsigned Variablen

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 ...

Antwort
Alt 08.03.11, 20:40   #1 (permalink)
 
Registriert seit: 07.09.05
Mortiis Leistung: Facit NTK
Mortiis eine Nachricht über ICQ schicken
Likes: 0
Standard Problem Umsetzung von C# nach JAVA - unsigned Variablen

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
JAVA Versuch
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);
Ich schaffe es nicht in JAVA selbiges Ergebnis zu erzeugen. Hab ich was wichtiges übersehen oder missverstanden. Freue mich über jeden Tip.

Cheerz
Mortiis
Mortiis ist offline   Mit Zitat antworten
Alt 08.03.11, 22:15   #2 (permalink)
 
Registriert seit: 28.07.08
ArnoNühm Leistung: Z3
Likes: 1
Standard

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
ArnoNühm ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 08.03.11, 22:31   #3 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

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
um das gleiche überlaufende ergebnis zu bekommen müsste step2 vor der division auf die niederwertigen 32 bit reduziert werden ... sprich ein logisches und mit (1L<<32)-1
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 08.03.11, 22:46   #4 (permalink)
Themenstarter
 
Registriert seit: 07.09.05
Mortiis Leistung: Facit NTK
Mortiis eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
]um das gleiche überlaufende ergebnis zu bekommen müsste step2 vor der division auf die niederwertigen 32 bit reduziert werden ... sprich ein logisches und mit (1L<<32)-1
Super Dankeschön!
Läuft auch mit verschiedenen Werten sauber durch.
Mortiis ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Problem Umsetzung von C# nach JAVA - unsigned Variablen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61