2016-03-24 20 views
0

BenC iki işaretsiz değer katmak ve C#

bu benim kod c olan C# yazmalısın c bir hesaplama var:

const unsigned long *S //which is an array that already contains data) 
unsigned long y; 
y = y + S[d]; //S[d] = 2582066069 and y = 3372499074 and the results is 1659597847 

ama benim C# kodu:

ulong[] S = (ulong[])hashtable[key]; 
ulong y = 2582066069; 
y = y + S[d]; // s[d] = 3372499074 but the result is = 5954565143 

Bu ekleme işlemindeki farkı c ve c olarak görmezden gelmiyorum. Ne yapmam gerektiği konusunda bana yardımcı olmama yardım eder misiniz? C# yılında, ulong veri boyutu 8-bytes durumdayken C durumda

+0

Neden aynı kullanmayan uint64_t veri türü kullanabilirsiniz, C bir 8 bytes unsigned integer veri türünü sahip olmak her zaman 8 bytes)

olduğunu iki hesaptaki örnek sayılar? – crashmstr

cevap

5

, unsigned long veri boyutu 4 bytes olduğunu. Eğer iki değer eklediğinizde, taşma alacak senin C durumunda Böylece

unsigned long 4 bytes 0 to 4,294,967,295 //in C 
ulong   8 bytes 0 to 18,446,744,073,709,551,615 //in C# 

.

3372499074 + 2582066069 = 5954565143 (overflow) = (4294967296 + 1659597847) mod 4294967296 = 1659597847 

Ama C# durumunda

, ulong veri türü hala taşma olmadan değerini muhafaza edebilir.
3372499074 + 2582066069 = 5954565143 (no overflow) 

C ve C# veri türü değeri limit daha fazla bilgi edinin. Ayrıca C veri türü boyut ( dbush daha anlaşılması için this post kontrol 's ve delnan' C yılında long veri türü için bazı standart boyut olmadığından ler cevapları bazen 4 bytes bazen 8 bytes olmak Mayıs ayında, özellikle faydalıdır -. Aksine C# 'ın muadili ulong sen

uint64_t u64; 
+0

Doğru, bu bir C hatası ve C# yönetiliyor. C# ile C# gibi taşma çoğaltamazsınız. Bu tam senaryo için eşit davranışı yeniden oluşturmak için modulo (%) operatörünü kullanabilirsiniz. – Mafii

+0

@Mafii Bu doğru değil. C#, taşma olup olmadığını kontrol etme ve bir istisna atma özelliğine sahiptir, ancak derleyici düzeyinde veya "checked" ve "unchecked" ile kodda açılıp kapatılabilir. – juharr

+0

oh, bunun farkında değildim. Kod hala yönetiliyor mu? – Mafii