Jump to content

Zmienna typu long long nie inkrementuje się do 8 bajtów


th3r4t3l
 Share

Recommended Posts

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...