Jump to content
Sign in to follow this  
th3r4t3l

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

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]

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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ć ?

 

 

 

 

 

Share this post


Link to post
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
Sign in to follow this  

×
×
  • Create New...