Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » bitweise ausgabe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
03.09.2003, 11:13 Uhr
~andreasK
Gast


Hallo,

wie geb ich denn einen int wert bit-weise aus?

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.09.2003, 11:21 Uhr
ao

(Operator)


Du suchst so was wie


C++:
int i = 2;
printf ("%b", i);


und erwartest

Code:
0000 0000 0000 0000 0000 0000 0000 0010


?

Da muss ich dich leider enttäuschen, das gibts nicht fertig. Selbermachen ist angesagt.

Mit i & 1, i & 2, i & 4 usw. kannst du jedes einzelne Bit darauf testen, ob es gesetzt ist oder nicht. Abhängig davon gibst du eine 1 oder eine 0 aus.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.09.2003, 11:25 Uhr
~andreasK
Gast


also würd das ungefähr so aus sehen?:


C++:
    int i = 2;

    if ((i & 1) == 0)
        printf("%d", 0);
    else
        printf("%d", 1);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.09.2003, 11:31 Uhr
0xdeadbeef
Gott
(Operator)


Wie wärs damit:

C++:
char *assign_bitmask(char *buf, size_t len, long long nr) {
  size_t i;
  if(len > sizeof(long long) * 8)
    len = sizeof(long long) * 8;
  i = len;
  while(i > 0) {
    --i;
    buf[len - i] = (nr >> i & 1) == 0 ? '0' : '1';
  }
  buf[len] = 0;
  return buf;
}

int main() {
  char buffer[7];
  printf("%s\n", assign_bitmask(buffer, 6, 42));
}



--edit: patch damits läuft
--edit: patch für Längenangabe.
--edit: patch für standard compliance und lange Zahlen. (size_t, long long)
--edit: patch um bogus output zu vermeiden (len > sizeof(long long) * 8)
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 03.09.2003 um 11:50 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.09.2003, 11:36 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
#include <bitset>
#include <iostream>
#include <limits>
#include <sstream>

template<typename T>
std::string bitstr(T value)
{
    std::stringstream str;
    str<<std::bitset<std::numeric_limits<T>::digits>(value);
    return str.str();
}

int main()
{
    int wert = 4711; // Das soll ausgegeben werden
    std::cout<<wert<<" lautet in Binärschreibweise "<<bitstr(wert)<<std::endl;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.09.2003, 11:39 Uhr
virtual
Sexiest Bit alive
(Operator)


Sorry, natürlich

C++:
str<<std::bitset<std::numeric_limits<T>::digits+std::numeric_limits<T>::is_signed>(value);


Sonst wird bei signed Datentypen das Vorzeichenbit verschluckt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.09.2003, 11:40 Uhr
~andreasK
Gast


Danke für all die Tipps, schau mir die mal an!

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.09.2003, 12:33 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
0xdeadbeef postete
--edit: patch damits läuft
--edit: patch für Längenangabe.
--edit: patch für standard compliance und lange Zahlen. (size_t, long long)
--edit: patch um bogus output zu vermeiden (len > sizeof(long long) * 8)


Was wieder ein beleg dafür ist, das Rad nicht jedesmal neu erfinden zu müssen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.09.2003, 21:04 Uhr
~Anfänger00
Gast


Ich sah mal wieder ne gute Übung darin...

C++:
#include <iostream>
using namespace std;

int* Bit(int x)
{
int ausg[32];
for(int i=0;i<31;i++)
{
if((x%(i+1))==0)
ausg[i]==1;
else
ausg[i]==0;
}
return ausg;
}

int main()
{
int eingabe;
cout<<"1225 entspricht der Binaerzahl: "<<Bit(1225);
cin>>eingabe;
}



ergibt leider:

C++:
0x22fec0



Was hab ich nun schon wieder verdreht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.09.2003, 21:29 Uhr
~Anfänger00
Gast


Achso int*..pointer...
aba int Bit[32](int x) geht nicht....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: