th3r4t3l Posted August 20, 2020 Report Share Posted August 20, 2020 Skoro zmienna typu unsigned long long przechowuje wartości od 0 do 18446744073709551615 czyli do 0xFFFFFFFFFFFFFFFF (8 bajtów) to dlaczego zeruje się po 4 bajtach [0xFFFFFFFF] i nie liczy do 8 bajtów [0xFFFFFFFFFFFFFFFF] ??? Napisałem przykładowy kod i tak mi się własnie dzieje #include<conio.h> #include<stdio.h> using namespace std; unsigned int i=0; unsigned long long licznik=0; int main() { printf("Rozmiar typu short : %d bytes.\n",sizeof(unsigned short)); printf("Rozmiar typu int : %d bytes.\n",sizeof(unsigned int)); printf("Rozmiar typu long : %d bytes.\n",sizeof(unsigned long)); printf("Rozmiar typu long long: %d bytes.\n\n",sizeof(unsigned long long)); while(i!=2) { licznik++; if(licznik%0xFFFFFFF==0) printf("Licznik: 0x%0.16X\r",licznik); // Wyswietl stan licznika co 0xfffffff = 268 435 455 // Wyswietlanie ciągłe mocno spowalnia program. if(licznik==0xFFFFFFFFFFFFFFFF) // = 18446744073709551615 { licznik=0; i++; } } } Czy ktoś to może wytłumaczyć???? Piszę to w devcpp [TDM-GCC 4.9.2 release 32-bit] Link to comment Share on other sites More sharing options...
Kaczus Posted August 21, 2020 Report Share Posted August 21, 2020 Typ long long nie gwarantuje ci odpowiedniej długości tylko tyle, że sizeof(unsigned long) <= sizeo(unsigned long long) Chcesz bitowości odpowiedniej, używaj typów uintxx_t, w tym wypadku uint64_t Link to comment Share on other sites More sharing options...
th3r4t3l Posted August 21, 2020 Author Report Share Posted August 21, 2020 Zmieniłem: unsigned long long suma=0; na: #include <inttypes.h> uint64_t suma=0; i nadal nie działa "%llx" w printf też nic nie pomaga printf("suma: 0x%0.16llx\n",suma); czego jeszcze mogę spróbować ? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.