Dateienmanipulation Bitoperatoren

nachtelfe

Grünschnabel
Hallo

ich habe ein Problem bei der Dateienmanipulation mittels Bitoperatoren:
Ich möchte die Reihenfolge der Ziffer einer maximal fünfstelligen Zahl umkehren, also z.B. 37849 zu 94873 und danach zu der Ausgangszahl addieren (also 37849+94873).

Habe leider keine Ahnung wie dies funktionieren könnte?

Vielen Dank für Eure Hilfe!
 
Das hat eigentlich nichts mit Bitoperationen zu tun, weil du ja dezimale Ziffern manipulierst. Ich würde die Zahlen in eine Zeichenkette umwandeln (entweder per sprintf() oder per std::ostringstream) und dann die Reighenfolge der Ziffernzeichen vertauschen. Dann kann man die Zeichenkette wieder in ein int umwandeln und damit rechnen. HIer habe ich mal ein Beispiel gebastelt:

Code:
#include "stdafx.h"

#include <sstream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
  ostringstream os;
  
  os << 12345; 
  
  string temp = os.str(); // temp enthält nun die Zeichenkette "12345";
  os.str( "" );           // os leeren  
  
  // temp zeichenweise rücwärts in os übertragen
  for ( int i = temp.length(); i > 0; --i )
    os << temp[ i - 1 ]; 
  
  temp = os.str();   // temp enthält nun die Zeichenkette "54321";

  cout << temp << endl;

  // mit einem istringstream in ein int umwandeln und rechnen
  istringstream is; 
  is.str( temp );

  int a; 
  is >> a; // a enthält jetzt 54321;

  cout << a + 1; // gibt 54322 aus;

  // warten auf zeicheneingabe
  char c;
  cin >> c;

  return 0;
}

Ein ganz anderer Ansatz wäre es, auf die Umwandlung in Zeichen zu verzichten und mit aufeinanderfolgenden Divisionen durch Zehn die Wertigkeiten der einzelnen Ziffern heruaszufinden, aber mir gefällt meine Version besser.
 
Vielen Dank,

die Stringmethode scheint doch die einfachere (und vor allem sichere) Methode zu sein. Das mit den Bitoperatoren hab ich mir nochmal überlegt und Du hast recht bei einer Verschiebung von einzelnen bits kann ich nur Vielfache von 2er Potenzen bilden.
 
Zurück