Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Licznik typu long long nie liczy do 8 bajtów

Ostatnio zmodyfikowano 2020-08-21 17:17
Autor Wiadomość
th3r4t3l
Temat założony przez niniejszego użytkownika
Licznik typu long long nie liczy do 8 bajtów
» 2020-08-20 15:28:07
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ę dzieje

C/C++
#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]
P-177453
pekfos
» 2020-08-20 18:22:00
Zmienna jest w porządku, źle wyświetlasz jej wartość. %X wyświetla unsigned int, powinno być %llX.
https://en.cppreference.com/w​/c/io/fprintf
P-177455
th3r4t3l
Temat założony przez niniejszego użytkownika
» 2020-08-21 15:29:04
Dzięki za podpowiedź ale niestety zarówno:
C/C++
printf( "Licznik: 0x%0.16llX\r", licznik );
jak i :
C/C++
printf( "Licznik: 0x%llx\r", licznik );
nie działa

Po osiągnięciu 4 bajtów zeruje się
P-177457
pekfos
» 2020-08-21 17:17:55
Wg podanej dokumentacji, %llX jest od C99, a z tego co czytam w https://gcc.gnu.org/onlinedocs​/gcc-4.9.2/gcc​/Standards.html#Standards, Twoja wersja kompilatora domyślnie używa C90, więc musisz dorzucić opcję -std=c99, lub wyższą. 4.9.2 to dość stara wersja, najnowszy build TDM-GCC to 9.2.0, możesz rozważyć upgrade w wolnym czasie.
P-177458
« 1 »
  Strona 1 z 1