wyliczenie wartości min i max typów danych

0

Witam, mam problem z napisaniem programu na laborki. Zadanie brzmi tak:

Napisz program, który wylicza najmniejszą i największą wartość w następują-
cych typach:

  • unsigned short int
  • signed short int
  • signed int
  • unsigned int
  • signed long int
  • unsigned long int
    Uwaga: zwrot „program, który wylicza” należy rozumieć dosłownie, tzn. obliczenia powinny odbywać się w jakieś pętli a nie przez odczytanie stałych zde-
    finiowanych w systemie.

Nie mam pojęcia jak za to się zabrać ;/ Bardzo bym była wdzięczna za jakieś wskazówki lub rozwiązanie do jednego typu danych, cokolwiek co mogłoby mi pomóc.

0

dla unsigned min nie ma jak policzyć bo to ZAWSZE z definicji jest 0.
max dla unsigned: x=0; max=~x;
min dla signed x=1; min=x<<(1<<((sizeof(x)<<3)-1);
max dla signed max=~min;

0

@Nemesis kolega wyżej podał ci gotowe wzory, ale jeśli chcesz pętlami to chodzi o to żeby zwiększać / zmniejszać pewną zmienną aż się nie "przekręci". Tzn w zapisie binarnym jak weźmiesz liczbę
1111
i dodasz do niej 1 to nagle ta liczba zmieni się w
10000
i jeśli zakres danego typu ma tylko 4 bity to w zmiennej zostanie ci 0000 więc nagle zmienna z pewnej dużej wartości przeskoczyła na 0. Jeśli liczby są signed to zmieni nam się nagle bit z przodu który wskazuje na liczby ujemne.

0

Prawdopodobnie chodziło o numeric_limits, przykład dla int

// numeric_limits example
#include <iostream>
#include <limits>
using namespace std;

int main () {
  cout << "Minimum value for int: " << numeric_limits<int>::min() << endl;
  cout << "Maximum value for int: " << numeric_limits<int>::max() << endl;
  return 0;
}

Więcej info:
http://www.cplusplus.com/reference/std/limits/numeric_limits/

Edit: jeśli to mają być "obliczenia" to można użyć makr, na wzór odpowiedzi _13th_Dragon.

0

muszę zrobić ten program iteracyjnie. inaczej nie da rady bo laborant mi tego nie przyjmie.

0

No to zaczynasz zawsze od liczby 1, bo trudno sobie wyobrazić typ który nie jest w stanie zapisać takie liczby (jest możliwość zadeklarowania zmiennej do której nie wejdzie liczba 2).
dla maxa: przesuwasz liczbę w lewo dopóki ta przesunięta jest większa od samej liczby.
dla mina: przesuwasz liczbę w prawo dopóki ta przesunięta jest mniejsza od samej liczby.

0

Skoro to ma byc wyliczanie to zrobilbym to tak:

T max = 0;
while(max < max+1) max++;
T min = max+1;

gdzie T to jest dowolny typ z twojej listy.

Oczywiscie jest to calkowicie bez sensu ale oczywiscie na studiach robi sie bezsensowne rzeczy...

0

hmm żeby wyliczyć np maks signed inta to będzie tak. ze znakiem czyli posiada jeden bit znaku który określa czy liczba jest ujemna czyli maksymalna wartość jaką może pomieścić to 31 bitów. 2^31 - 1 = 2147483647 min int będzie analogicznie -2147483647

0

dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1