Steffen: Integer Variable wie in C

Beitrag lesen

Hallo,
wie ihr wisst, kann in C eine Integer Variable max. 32 Bit Zahlen speichern, also rund 4 Mrd. (unsigned).
Wenn man diese grenze Überschreitet, dann wird wieder von vorne "gezählt".
In JavaScript kann man aber in eine Variable locker Zahlen bis ca. 10 Mrd. speichern, bevor es diesen "überlauf" gibt.

Mein Problem ist, dass ein JavaScript genauso rechnen muss wie ein C Programm.
Dies habe ich gelöst indem ich mod 4294967296 (%4294967296) für die Berechnung benutze, dies funktioniert aber nicht einwandfrei.

Mein C Code implementiert xTEA: http://en.wikipedia.org/wiki/XTEA

  
#include<stdio.h>  
int main(void) {  
     unsigned long v0=0x70e1225d, v1=0x6e4e7655, i;  
     unsigned long sum=0, delta=0x9E3779B9;  
     unsigned long k[4] = {0x00000000,0x00000000,0x00000000,0x00000000};  
     printf("       v0       :      v1     :      sum\n");  
     for(i=0; i<32; i++) {  
         v0 = (  v0+(((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]))  )%4294967296;  
         sum = (sum+delta)%4294967296;  
         v1 = (  v1+(((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + k[sum>>11 & 3]))  )%4294967296;  
  
         printf("%02d: %11u : %11u : %11u \n",i,v0,v1,sum);  
     }  
  
     printf("\n\nErg: %x : %x\n",v0,v1);  
  
     return 0;  
 }  

Der Testvektor wurde von Wikisource entnommen, und das Ergebnis stimmt soweit.
Das %4294967296 kann auch entfallen, nur zur Übersicht (JavaScript).

Jetzt der JavaScript:

<script language="JavaScript">  
<!--  
encrypt();  
function encrypt()  
  {  
  var v0 = 0x70e1225d;  
  var v1 = 0x6e4e7655;  
  var sum=0, delta=0x9E3779B9, i;  
  var k = new Array(0x00000000,0x00000000,0x00000000,0x00000000);  
  
  document.write(" i : v0 : v1 : sum<br>");  
  for(i=0; i<32; i++) {  
     v0 = (  v0+(((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]))  )%4294967296;  
     sum = (sum+delta)%4294967296;  
     v1 = (  v1+(((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + k[sum>>11 & 3]))  )%4294967296;  
  
     document.write(i+":"+v0+" : "+v1+" : "+sum+"<br>");  
     }  
  }  
//-->  
</script>

Die sum wird richtig berechnet, nur es gibt einen Fehler bei v0 und v1, diese werden falsch berechnet.

Wodran liegt dies, und wie kann man es lösen?

Grüße
Steffen