C++ Binärzahl zuweisen?

  1. Altivec

    Altivec Thread Starter MacUser Mitglied

    Mitglied seit:
    29.05.2006
    Beiträge:
    1.266
    Zustimmungen:
    56
    Hallo!
    Ich hab vor, ein Programm zu schreiben, das mit Bits und Bytes umgehen soll. Hab auch gerade entdeckt, daß man einer Variablen Hex-Werte zuweisen kann. Manchmal ist es aber auch ganz angenehm, Binärzahlen zu haben. Gibt es eigentlich die Wertzuweisung und -ausgabe (s.u.) auch in binär?

    Code:
    [SIZE="3"][SIZE="2"][COLOR="Blue"]#include[/COLOR] <iostream>
    
    [COLOR="Blue"]typedef unsigned char  byte[/COLOR];
    [COLOR="blue"]typedef unsigned short word[/COLOR];
    
    [COLOR="Blue"]int[/COLOR] main()
    {
    	[COLOR="blue"]using namespace[/COLOR] std;
    	
    	[COLOR="blue"]byte[/COLOR] a = 0x2F;
    
    	cout.setf(ios::hex, ios::basefield);
    
    	cout << "a = " << ([COLOR="blue"]int[/COLOR]) a << endl;
    
    	[COLOR="blue"]return[/COLOR] 0;
    }[/SIZE][/SIZE]
     
    Altivec, 13.11.2006
    #1
  2. autoexec.bat

    autoexec.bat MacUser Mitglied

    Mitglied seit:
    21.01.2005
    Beiträge:
    2.113
    Zustimmungen:
    20
    Nein, da ist Handarbeit angesagt. :hehehe:
     
    autoexec.bat, 13.11.2006
    #2
  3. Altivec

    Altivec Thread Starter MacUser Mitglied

    Mitglied seit:
    29.05.2006
    Beiträge:
    1.266
    Zustimmungen:
    56
    Schade, schade... :(

    Hab mir jetzt als Notlösung diese Variante der Zuweisung überlegt:

    Code:
    [COLOR="Blue"]byte[/COLOR] b = bin8(0x00101111);
    mit der Funktion

    Code:
    [COLOR="blue"]byte[/COLOR] bin8([COLOR="blue"]unsigned long[/COLOR] b)
    {
    	[COLOR="blue"]int[/COLOR] feld[]={1,2,4,8,16,32,64,128};
    	[COLOR="blue"]int[/COLOR] dez = 0;
    
    	[COLOR="blue"]for[/COLOR] ([COLOR="blue"]int[/COLOR] i = 7; i >= 0; i--)
    		dez += b & (1 << 4*i) ? feld[i] : 0;
    
    	[COLOR="blue"]return[/COLOR] dez;
    }
    Falls jemand eine bessere Lösung kennt, wird die natürlich gern genommen.
     
    Altivec, 14.11.2006
    #3
  4. autoexec.bat

    autoexec.bat MacUser Mitglied

    Mitglied seit:
    21.01.2005
    Beiträge:
    2.113
    Zustimmungen:
    20
    Darfs ein bisschen C sein? :hehehe:

    Code:
    long b = strtol("00101111",NULL, 2);
    
    Return-Werte zu ignorieren ist natürlich nie eine gute Idee. :Oldno:


    Wenn es eine reine C++-Lösung sein soll, lies dich mal in Bitsets ein.

    Ich hab es jetzt nicht mehr ganz im Kopf, aber so in etwa müsste es gehen:

    Code:
    #include <iostream>
    #include <bitset>
    
    using namespace std;
    
    int main() {
    
    	string s("11001111");
    	bitset<8> bs (s);
    
    	cout << "Binaer: " << bs << endl;
    	cout << "Dezimal: " << bs.to_ulong() << endl;
    
    	return 0;
    }
    
     
    autoexec.bat, 14.11.2006
    #4
  5. der_Kay

    der_Kay MacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    Es gibt auch in C die gerne vergessenen bitfields, der Mehrwert liegt aber im STL-Typ std::bitset

    PHP:
    #ifndef byte
    #define byte unsigned char
    #endif

    typedef union _BYTE
    {
        
    byte _b;

        
    struct
        
    {
            
    unsigned _0 :1
            
    unsigned _1 :1
            
    unsigned _2 :1
            
    unsigned _3 :1;
            
    unsigned _4 :1
            
    unsigned _5 :1
            
    unsigned _6 :1
            
    unsigned _7 :1;
        };
    BYTE;
     
    der_Kay, 14.11.2006
    #5
  6. Altivec

    Altivec Thread Starter MacUser Mitglied

    Mitglied seit:
    29.05.2006
    Beiträge:
    1.266
    Zustimmungen:
    56
    Sehr interessant, danke für Eure Tips!
     
    Altivec, 15.11.2006
    #6
Die Seite wird geladen...
Ähnliche Themen - C++ Binärzahl zuweisen
  1. Wolfseye
    Antworten:
    16
    Aufrufe:
    289
    wegus
    11.07.2017
  2. GeFa
    Antworten:
    9
    Aufrufe:
    601
    Gondomir
    15.08.2016
  3. Saloice
    Antworten:
    4
    Aufrufe:
    576
    hr47
    06.05.2016
  4. ZoliTeglas
    Antworten:
    5
    Aufrufe:
    384
    mrthomasd
    13.10.2015
  5. LordPalm
    Antworten:
    15
    Aufrufe:
    938
    LordPalm
    21.04.2011