Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Konwersja systemu dziesiętnego na ósemkowy liczb ujemnych.

Ostatnio zmodyfikowano 2014-06-08 12:18
Autor Wiadomość
traktor01
Temat założony przez niniejszego użytkownika
Konwersja systemu dziesiętnego na ósemkowy liczb ujemnych.
» 2014-06-06 22:46:47
Witam!
Mam funkcję:
C/C++
void konwersja( int a, int tab[ 10 ] ) {
    int osemkowa = 0;
    int i = 0;
    while( a > 0 ) {
        osemkowa = a % 8;
        a /= 8;
        tab[ i ] = osemkowa;
        i++;
    }
}
Dokonuje ona zmiany reprezentacji liczb z dziesiętnego na ósemkowy (tablicę czytamy od tyłu).
Chcę zmienić liczbę ujemną w systemie dziesiętnym na system ósemkowy. Po zmianie potrzebuje otrzymaną wartość mieć w postaci zmiennej string lub int w celu wpisania danych do tablicy. Wyklucza to użycie: cout<<oct<<liczba_dziesietna; Według tego polecenia np. liczba -12 powinna zostać zapisana jako: 7777777764. Proszę o wskazówki i z góry dziękuję za pomoc.
[/i]
P-111613
Monika90
» 2014-06-06 23:00:21
7777777764
Tzn. liczba ma być obcięta do 30 bitów?
P-111615
traktor01
Temat założony przez niniejszego użytkownika
» 2014-06-06 23:01:32
Tak, zgadza się.Liczba ma być obcięta do 30 bitów.
P-111616
Monika90
» 2014-06-06 23:23:02
To jeżeli ja dobrze rozumiem, to coś takiego?
C/C++
std::string octal30( const int x )
{
    unsigned y = x & 03777777777;
    if( x < 0 )
         y |=( 1u << 29 );
   
    char buff[ 16 ];
    std::sprintf( buff, "%o", y );
    return buff;
}
P-111617
traktor01
Temat założony przez niniejszego użytkownika
» 2014-06-06 23:32:07
Dokładnie o to chodziło. Problem rozwiązany. Bardzo dziękuję za pomoc - zaoszczędziło mi to wielu kolejnych godzin poszukiwań.
P-111618
Monika90
» 2014-06-06 23:45:51
Jeżeli o to chodziło to dobrze. Dla liczb dodatnich nie ma problemu, ale dla ujemnych nie jest jasne, co znaczy obcięta do 30 bitow. No ale dopóki nie będziesz miał bardzo dużych ujemnych liczb, to nie powinno być problemu.
P-111619
traktor01
Temat założony przez niniejszego użytkownika
» 2014-06-07 11:42:37
Mógłbym prosić o jakieś materiały odnośnie nauki tego rodzaju rzeczy ew. o wytłumaczenie skąd jest ta wartość: 03777777777 i jak to się ma w innych systemach? W internecie niestety nie mogę znaleźć interesujących mnie informacji. Chciałbym wykonać tego typu konwersję również dla innych systemów liczbowych np. o podstawie 3 lub 5 itd. dla liczb ujemnych, ponieważ dla liczb dodatnich sprawa jest jasna.
P-111624
pekfos
» 2014-06-07 20:22:51
Mógłbym prosić o jakieś materiały odnośnie nauki tego rodzaju rzeczy
Google, algebra Boole'a, operatory bitowe C++.
P-111670
« 1 » 2
  Strona 1 z 2 Następna strona