• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C] Wyświetlanie liczb większych niż 2^32

Object Storage Arubacloud
0 głosów
337 wizyt
pytanie zadane 27 marca 2017 w C i C++ przez Kamil Duljas Użytkownik (990 p.)

Witam, problem pewnie trywialny, lecz nie potrafię dostrzec powodu błędu. Otóż chciałbym policzyć wartość bezwzględną liczb z zakresu od - 2 000 000 000 do 2 000 000 000 i wszystko by grało gdbyby nie fakt, że wynik maksymalny który się wyświetla to 294967296. Poniżej kod. Próbowałem zmieniać typy zmiennych, ale bez skutku. mam 64-bit system, piszę w  Code blocks, a kompiluje przy pomocy GNU GCC Compiler.

 

#include <stdio.h>

int main()
{
    int a,b;
    unsigned int c;
    scanf("%d %d", &a, &b);

    if((a>=-2000000000) && (a<=2000000000) && (b>=-2000000000) && (b<=2000000000) )
    {c = abs(a-b);
    printf("%d", c);}
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 27 marca 2017 przez Dexterim Dyskutant (8,370 p.)
wybrane 28 marca 2017 przez Kamil Duljas
 
Najlepsza

Jeśli chcesz korzystac z duzych liczb to i rowniez powinieneś zmienić int na long lub long long

poza tym do funkcji abs potrzebna jest biblioteka

Przerobiłem kod na coś takiego

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
    long long a,b;
    unsigned long c;
    scanf("%lld %lld", &a, &b);
 
    if((a>=-2000000000) && (a<=2000000000) && (b>=-2000000000) && (b<=2000000000) )
    {c = abs(a-b);
    printf("%lu", c);}
 	getch();
    return 0;
}

 

komentarz 27 marca 2017 przez Kamil Duljas Użytkownik (990 p.)
Spróbuj to skompilować, u mnie bez zmian.

Co do ABS to u mnie ta opcja działa w standardowej bibliotece <stdio.h>
komentarz 27 marca 2017 przez Dexterim Dyskutant (8,370 p.)
tzn. jakiego efektu Ci brakuje. Biblioteka <stdio.h> nie ma funkcji abs to Twoj kompilator bierze sobie ja z jakiegos miejsca wiec lepiej dodaj <stdlib.h>
komentarz 27 marca 2017 przez Kamil Duljas Użytkownik (990 p.)
Dexterim tak jak napisałem u góry, chciałbym by ten kod działał w pełnym zakresie, czyli by wyliczył odległość między -2 000 000 000 a 2 000 000 000, a maksymalna wartość jaką pokazuje to 294967296 . Powinien pokazać 4 000 000 000 :)
komentarz 27 marca 2017 przez Kamil Duljas Użytkownik (990 p.)
Przekleiłem cały Twój kod do nowego pliku i dalej bez zmian, razem z tymi bibliotekami
komentarz 27 marca 2017 przez Dexterim Dyskutant (8,370 p.)
funckja abs dziala na typie long a Ty porzebujesz typu wiekszego czyli long long.

Z jakiegos powodu specyfikator %lld nie działa jeśli uda Ci sie to jakos zrobić to wtedy problem bedzie rozwiązany a no i sam musisz napisać funkcje abs
1
komentarz 27 marca 2017 przez Dexterim Dyskutant (8,370 p.)
edycja 27 marca 2017 przez Dexterim
To powinno rozwiązac sprawe
#include <stdio.h>

long long Abs(long long a,long long b);

int main()
{
    long long a,b,c;
    scanf("%I64d %I64d", &a, &b);
	c = a +b ;
	
	if((a>=-2000000000) && (a<=2000000000) && (b>=-2000000000) && (b<=2000000000) ){
        c = Abs(a,b);
        printf("%I64d", c);
    }
   
    return 0;
}

long long Abs(long long a, long long b){
	if(a>b)
		return a - b;
	return b - a;
}

 

komentarz 27 marca 2017 przez mokrowski Mędrzec (155,460 p.)
I tu bym polecał zerknąć na przyszłość co do pojemności typów i zaskoczeń z tym problemem związanych:

http://en.cppreference.com/w/c/language/arithmetic_types

Podobne pytania

+1 głos
2 odpowiedzi 209 wizyt
0 głosów
1 odpowiedź 373 wizyt
pytanie zadane 12 lutego 2019 w C i C++ przez seba0456 Nowicjusz (160 p.)
0 głosów
6 odpowiedzi 253 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...