Ben C Bu kodu var başarısız (sadece çalışma için var):C sola kaydırma
char x;
uint64_t total = 0;
for(x = 20; x < 30; x++){
total = (((((1 << x) * x)/64) + 1) * sizeof(uint64_t));
printf("%d - %llu\n", x, total);
}
yazdırılır Ne:
20 - 2621448
21 - 5505032
22 - 11534344
23 - 24117256
24 - 50331656
25 - 104857608
26 - 218103816
27 - 18446744073625665544
28 - 18446744073575333896
29 - 18446744073508225032
Neden x> 26 sahibim olanlar garip değerler? Ubuntu 10.10 64 bit üzerinde gcc 4.6.1'deyim.
problemi char x gibi görünüyor, bunun için uint64_t kullanıyorum ve iyi çalışıyor. –
Eğer toplam = (((((1 << x) * x)/64) + 1) * sizeof (uint64_t)); 'basitleştirilmişse, daha net olanı görebileceksiniz. (1 << x) * x); 'printf ile yazdırılır ("% d - 0x% llx \ n ", x, total);" printf tarafından büyük bir sayı ("... -% llu \ n", ... toplam); – gbulmer