Czy to normalne kiedy w tego typu zadaniu: Napisz program, który wpisuje do kolejnych elementów tablicy 20-elementowej kolejne potęgi n, począwszy od n^0. Liczbę n należy wczytać z klawiatury. Potęgowanie należy zrealizować za pomocą wielokrotnego mnożenia przy wyższej potędze typu 4^19 wypisuje mi 0? Jaka jest ograniczona liczba (maksymalna) jaką może wypisać program. Dlatego, że przy większych liczbach i ich potęgach wyskakuje mi na przykład liczba ujemna :( Tu nam przykład programu: #include #include
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
Roman300
Dochodzi tu do próby przypisania do zmiennej liczby większej, niż może ona zmieścić.
Typ int mieści liczby od -2^31 do 2^31-1, a long long -2^63 do 2^63-1
Np 4^15 = 1 073 741 824, typ int mieści liczby do 2 147 483 647, jest ok 4^16 = 4 294 967 296, więc liczba ta nie zmieści się w zmiennej, program "przerzuci" liczbę na ujemną według schematu: max + 1 = min czyli (2^31-1) + 1 = -2^31
Rozwiązaniem problemu jest zastosowanie większej zmiennej, np long long.
2 votes Thanks 1
MakPawel
Każda zmienna ma swój zakres nie ma zmiennej z nieograniczoną wielkością jeżeli wyjdziesz poza zakres to wtedy zmienna przyjmuje ona wartość od tyłu np short int jeżeli masz liczbę 32 767 i chcesz ją powiększyć o 3 to zmienna przyjmie wartość = -32 766
Typ int mieści liczby od -2^31 do 2^31-1, a long long -2^63 do 2^63-1
Np
4^15 = 1 073 741 824, typ int mieści liczby do 2 147 483 647, jest ok
4^16 = 4 294 967 296, więc liczba ta nie zmieści się w zmiennej, program "przerzuci" liczbę na ujemną według schematu:
max + 1 = min
czyli (2^31-1) + 1 = -2^31
Rozwiązaniem problemu jest zastosowanie większej zmiennej, np long long.
jeżeli wyjdziesz poza zakres to wtedy zmienna przyjmuje ona wartość od tyłu
np short int jeżeli masz liczbę 32 767 i chcesz ją powiększyć o 3 to zmienna przyjmie wartość = -32 766
char
−128 — +127 (ze znakiem)
0 — +255 (bez znaku)
short int
−32 768 — +32 767 (ze znakiem)
0 — +65 535 (bez znaku)
int, long int
−2 147 483 648 — +2 147 483 647 (ze znakiem)
0 — +4 294 967 295 (bez znaku)
long long int
−9 223 372 036 854 775 808 — +9 223 372 036 854 775 807 (ze znakiem)
0 — +18 446 744 073 709 551 615 (bez znaku)
bez znaku wystarczy dopisać unsigned