C++ jak sprawdzić ile bajtów zajmuje liczba w zmiennej

0

Witajcie, jak w C++ mogę sprawdzić ile bajtów zajmuje liczba w zmiennej, załóżmy że jest to np. -123.

Pozdrawiam

0

trzeba obliczyć logarytm o podstawie 2 z danej liczby :)

Z minusami sprawa ma się inaczej, bo 1 bit oznacza znak. Jeśli jest zapalony to liczba jest ujemna. Napisz dokładnie do czego to potrzebujesz.

0

@Tacet Ile bajtów w pamięci jest przeznaczone na tą liczbę, jak to inaczej można interpretować?

1

sizeof(TYP_ZMIENNEJ);

Można to interpretować na 2 sposoby, tzn ile najmniej potrzeba bitów w pamięci żeby zapisać daną liczbę np. dla 8 będzie to 4 bity), ale i tak jak zapiszesz to w int'a to zajmie tyle ile int potrafi przechować.

0

No właśnie, sizeof z inta zawsze daje mi 4 bajty bo tyle zajmuje mi ten typ danych.

Tu mam kod do liczenia logarytmu

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int x,a;
    float wynik;
    cout << "podaj podstawe logarytmu" << endl;
    cin >> x;
    cout << "podaj liczba z ktorej ma byc liczony logarytm"<<endl;
    cin >> a;
    wynik = (log(x))/(log(a));
    cout <<wynik;
    return 0;
} 

Z tym, że wynik dla -77 wychodzi ujemy.

0
Lukassz napisał(a):

@Tacet Ile bajtów w pamięci jest przeznaczone na tą liczbę, jak to inaczej można interpretować?

Lukassz napisał(a):

No właśnie, sizeof z inta zawsze daje mi 4 bajty bo tyle zajmuje mi ten typ danych.

Coś sam sobie przeczysz.

Lukassz napisał(a):
...
    wynik = (log(x))/(log(a));
...

Z tym, że wynik dla -77 wychodzi ujemy.

Logarytm dla wartości ujemnych - nie istnieje.

Może chodzi czy o to:

char buf[65];
cout<<strlen(itoa(-123,buf,10))<<endl;
cout<<strlen(itoa(77,buf,10))<<endl;
cout<<strlen(itoa(-77,buf,10))<<endl;
0
Ola Nordmann napisał(a):

Z minusami sprawa ma się inaczej, bo 1 bit oznacza znak. Jeśli jest zapalony to liczba jest ujemna. Napisz dokładnie do czego to potrzebujesz.

Jak chcesz obliczyć ilość bitów potrzebną do zapisania signed to musisz robić: log o podstawie 2 z (abs)zmienna +1. Jeśli zmienna jest mniejsza od 1 to musisz zanegować wszystkie bity.

0

Jeżeli jest potrzebna podstawa 2 to chyba szybszą metodą będzie:

int value=-123;
unsigned bits=(value<=1)+(value<0);
while(value>>=1) ++bits;
unsigned baits=(bits+7)>>3;
4

@Lukassz liczba w zmiennej zawsze zajmuje tyle ile sama zmienna. Komputer sam z siebie nic tu nie optymalizuje. Jak masz inta to choćbyś miał w nim 0 to zajmuje sizeof(int) bajtów.

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