[c++]przypisanie float wartości z char

0

Zastanawiam się czy przypadkiem wydrukowana wartość a; nie powinna wynosić 12.25, a jeśli tak to dlaczego otrzymuję wynik 3.11573e+033?


    float a;
    char * b = (char *) & a;  
    * b = 12.25;          
    cout << a ;  

...dodam, że dla różnych typów jak i wartości zmiennych - czasami ten kod zachowuje się poprawnie (czyli to co przypisałem *b drukuje się wyjściu cout-a)

0

Nie gdyż twój float zostanie zamieniony na char, który zostanie przypisany do float. Wyjdzie w sumie coś takiego:

float a = (char)12.25;
0

Wielkie dzięki za odp. ale i tak za bardzo nie mogę dojść np. jaka wartość powinna być w b (jak dla mnie na logikę 12.25), a na out dostaję jakieś głupoty.

 
 float a = 12.25; 
    
 char * b = (char*) &a;
0

No nie za bardzo. Bo niby czemu? Tak się nie zamienia floatów na stringi.

0

Sam się zastanawiam bo ogólnie cały program tak mi się wydaje poprawnie przekazuje wartość do funkcji:

void bity( char* bajty, int x, int y)
{
     
    
    for (int i=y; i>=x; i--)
    {
        if (i>=x && i<=y)
        {
            if ((int)(*(bajty+(i/8)) )& ((1 << i%8)))
                cout << 1;
            else
                cout << 0;
        }
    }
    
}



int main()

{
    
   float a = 12.25; 
    
     char *b= (char*) &a;
    
    
   
    cout << endl << "znak: ";
    bity(b, 31,31);

    cout << endl << "cecha: ";
    bity(b,23,30);       

    cout << "mantysa: ";
    bity(b, 0, 22);
    cout << endl;
    
    
   
    return 0;
}
 

Staram się to rozgryźć choć coś ciężko mi to przychodzi, bo chciałbym ten program przenieść do javy docelowo.

0

Jeśli byłby ktoś tak miły to bardzo prosiłbym o przełożenie tego kodu na formę bez wskaźników, bo to myślę dopiero pozwoliłoby mi na zrozumienie tego co tam tak naprawdę się dzieje. (Strasznie dziwi mnie to, że program powyżej działa poprawnie; przekazując jakąś tam wartość z b do funkcji, gdzie moje nieudolne próby wyświetlenia wartości b dają na wyjściu jakieś dziwne wyniki).

 char *b= (char*) &a;

To samo ma miejsce w samej funkcji(wyświetlenie wartości bajty daje dziwny wynik). Nie wiedząc co tak naprawdę zostało przekazane przez b, nie mogę rozgryźć jakie dokładnie działania zachodzą na zmiennej bajty w 2 warunku if. Rozumiem, że do wsk(bajty) dodajemy (i/8) i jest przesuniecie o 1 bit w lewo razy reszta mod...ale po co ten (int)? Do samego warunku - jak miałby ktoś pomysł jak zapisać go bez użycia wskaźnika(nie koniecznie w 1lini) byłbym wdzięczny; z góry dziękuje i pozdrawiam.

if ((int)(*(bajty+(i/8)) )& ((1 << i%8))); 

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