Tablica Bool'owska To Float

0

mam 32 elementową tablice bool'owską macie moze pomysł jak zrzutować ją do float'a , próbowałem przepisać bit po bicie z tablicy do zmiennej float ale nie wyszło a swój pomysł opierałem na FAQ (Char jako tablica 8 bool`i :)), naczytałem się tez troche o binarnej reprezentacji float'a i napisałem cos co niby robi taką konwersje ale ani nie jestem tego pewny ani zadowolony kiedy masa tych konwersji pokazuje mi wynik INF czyli nieskończoność

czyli scislej

jak dobrac sie do poszczególnych bitów float'a ? a w szczególności jak je zmieniać

ew jakis inny pomysł

0

Poczytaj sobie o uniach i polach bitowych.

0

dzięki wave ... szczeze do podjarałem sie ze problem z głowy ... ale ni emoge twgo przełknąc

typedef struct {
   unsigned char b : 1; 
} bit;    

typedef union {
   bit binbit[32];   
   bool binbool[32];
   float rzecz; 
} osobnik;   

int main(void) {
   osobnik o;
   o.rzecz = 1.0;
   printf("float : %f\n",o.rzecz);
   printf("tablica bitow : ");
   for (int i=0;i<32;i++) {
       if (o.binbit[i].b) {printf("1");}
       else {printf("0");};
   }
   printf("\n");    
   printf("tablica booli : ");
   for (int i=0;i<32;i++) {
       if (o.binbool[i]) {printf("1");}
       else {printf("0");};
   }
   return 0;
}

problem w tym ze to co wyswietla mi sie z tablicy binbool i binbit (pomijając ze nie to samo , czemu ?)raczej na pewno nie jest binarna reprezentacja tel liczby gdyz czego bym nie podstawił pod o.rzecz to zawsze binarna reprezentacja jest tak sama. Co robie źle ?

0

wiec lecimy dalej skoro nikt nie ma na razie pomysłu ... doszedłem do tego ze jezeli zamienie tablice binbit (binbool odpuszczam) na struktóre z 32 polami bitowymi

unsigned b1 : 1;
unsigned b2 : 1;
...
unsigned b32 : 1;

wówczas sprawa wydaje się być rozwiązana (czytaj zmiana pól bitowych wywołuje zmiane pola float) jednak to mnie nie urządza musze mieć możliwość latania po tych polach swobodnie co wiecej także losowo .. to musi być tablica ... moze cos komuś teraz przyjdzie do głowy

0

"kazał pan musiał sam" - jak mówi moja starsza

a wiec unie i pola binarne get out, wróciłem po natchnienie do FAQ (Char jako tablica 8 bool`i :)), problem polegał na przesunieciu w lewo króego nie mozna stosowac dla float'ów ale natkniełem sie na trik któr pozwala to obejsc i w ten sposób macie którtki przykładzik jak mozna manipulowac float'ami na poziomie binarnym, pozwala tez zrobic to o co mi chodzi czyli ustawic kolejne bity float'a tak jak sa ona zapisane w tablicy boolowskiej, przykład ten prezentuje poza tym do czego słuzy najstarszy bit w reprezentacji binarnej float'a (znak liczby).

#include <iostream>
using namespace std;

//funkcje get i set Copyright(R) FAQ (user Marooned)
//zmieniłem jedynie typ parametrów z char na int

bool get(int a, int pos)
{
    return (a&(1<<pos));
}

void set(int &a, int pos, bool stan)
{
    (stan)?a|=(1<<pos):a&=~(1<<pos);
}

int main() {
  float f = -100.1;

  // sztuczka , aby mozna było robic "<<" na float'ach
  // Copyright(R) http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/bitshift.html
  int * ptr = (int *) (& f) ;

  printf("Float : %f\n",f);
  printf("FloatToBin : ");
  
  for(int i=31;i>=0;i--) { 
    if (get(*ptr,i)) {
      printf("1");   
    } else {
      printf("0");    
    };         
  };  
  
  printf("\n"); 
  
  set(*ptr,31,0);

  printf("Float : %f\n",f);
  printf("FloatToBin : ");

  for(int i=31;i>=0;i--) { 
    if (get(*ptr,i)) {
      printf("1");   
    } else {
      printf("0");    
    };         
  };  
  
  return 0;
}

chyba jest dobrze mnie bynajmniej zadowala , a tak na marginesie to znalazłem ze nie da sie robic tablic pól bitowych

0

"Kazał pan musiał sam" takie teksty do swojej starej zachowaj bo na forum poważnych ludzi na pewno nie pasują. Tu popierwsze nie każesz tylko prosisz i po drugie grzecznie czekasz na odpowiedź a nie rzucasz się jak wesz na kołnierzu. Myślisz że jesteś taki szczwany bo wykombinowałeś jak to zmienieć bity liczby 4 bajtowej? To ja ci powiem, że przykłady wygszania i ustawiania bitów są w każdej książce dla początkujących więc nie zgrywaj się na takiego mędrka bo na tym forum pewnie 3/4 ludzi zna te operacje.

0

"na tym forum pewnie 3/4 ludzi zna te operacje"

czyli wydaje ci sie, ze 1/4 ludzi na forum nie ma nic wspolnego z programowaniem?

nie wiem, ale wydaje mi sie, ze bity to podstawa, tak jak napisales mozna znalezc to w KAZDEJ ksiazce o programowaniu!

prawde mowiac nie wyobrazam sobie kogos piszacego program nie majac pojecia jak odczytac/ zapisac bity z bajtu!

a do autora pytania: poszukaj czegos na temat operatorow AND i OR.

0

no panowie widze ze was baardzo zirytowałem .. a nie potrzebnie ... "kazał pan .." miał raczej wyrazić ze udało mi sie z tym poradzic a nie nikogo ganic ze mi nie pomógł troche poczucia humoru (co prawda przydałby sie jeden usmieszek i było moze bez takich ), widze ze bardzo was dotknełem za co przepraszam. Jeszcze tylko komentarz do

"grzecznie czekasz"

  • czesto wpadam w dyskusje na temat nas Polaków którzy czekają na lepsze czasy zamiast brać sie do roboty ... to tyle.
0

Widzę że jednak nie jesteś człowiekiem za którego Cię uważałem. Moja wcześniejsza wypowiedź była krzywdząca za co Cię przepraszam i mam nadzieje, że przyjmiesz moje przeprosiny ;-|
Moderatora forum proszę o wykasowanie mojej niesproawiedliwej wypowiedzi (która była napisana pod wpływem wisielczego humoru).

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