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

Wielkosci zmiennych

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
165 wizyt
pytanie zadane 12 listopada 2016 w C i C++ przez Johny Dyzma Tea Początkujący (280 p.)
Dlaczego ten "program" zamiast blednego wyniku np inf albo wartosci ujemnych daje prawdlowa wartosc??

 

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    cout<<"Wielkosc zmiennej short "<<sizeof (short)<<endl;     //podaje 2
    cout<<"Wartosc maksymalna short "<<SHRT_MAX<<endl;    //podaje 32768
    short x=SHRT_MAX,
    cout<<"Blad " <<x+1;   // podaje 32769 a nie powinno
    return 0;
}
1
komentarz 12 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Dokładnie, tak jak napisał adrian17. Jeżeli chcesz zaobserwować błąd (bez konwersji):

#include <iostream>
#include <climits>

using namespace std;

int main() {
    cout << "Wielkosc zmiennej short " << sizeof (short) << endl; //podaje 2
    cout << "Wartosc maksymalna short " << SHRT_MAX << endl; //podaje 32767
    short x = SHRT_MAX + 1;
    cout << "Blad:" << x; // podaje -32768
    return 0;
}

 

2 odpowiedzi

+2 głosów
odpowiedź 12 listopada 2016 przez adrian17 Ekspert (334,700 p.)
wybrane 12 listopada 2016 przez Johny Dyzma Tea
 
Najlepsza

Ponieważ w wyrażeniu `x+1` następuje cicha konwersja zmiennej x na typ int i wynikowe wyrażenie też ma typ int.

Można to zaobserwować:

int main(){
 short a = 1;
 auto b = a + 1; // b ma typ int. Mozna to np. zobaczyc najezdzajac na nazwe zmiennej w niektorych IDE.
}

Można o tym poczytać: http://en.cppreference.com/w/cpp/language/implicit_conversion#Numeric_promotions ale nie jest to lekka lektura.

 

–2 głosów
odpowiedź 12 listopada 2016 przez Ditrix Mądrala (5,650 p.)
Ponieważ nie dodajesz jedynki do zmiennej x, a tylko wyświetlasz wynik sumy zmiennej x i jedynki.

I do wstawiania kodu masz specjalną opcję na forum.
1
komentarz 12 listopada 2016 przez adrian17 Ekspert (334,700 p.)
(Ta odpowiedź nie wyjaśnia, czemu wynik dodawania jest poprawny mimo, że nie mieści się w typie short)

Podobne pytania

–2 głosów
1 odpowiedź 144 wizyt
pytanie zadane 8 maja 2018 w C i C++ przez giedymin33 Początkujący (290 p.)
0 głosów
1 odpowiedź 801 wizyt
pytanie zadane 7 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
3 odpowiedzi 603 wizyt
pytanie zadane 22 stycznia 2017 w C i C++ przez Marchewka900 Bywalec (2,970 p.)

91,847 zapytań

140,523 odpowiedzi

317,028 komentarzy

61,170 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...