Bitoperationen

satyja

Grünschnabel
hoffentlich kann mir hier geholfen werden...

mein progg soll folgendes leisten:

der benutzer soll eine zahl eingeben, die dann binär auszugeben ist und womit er bestimmte bitoperationen durchführen kann.
beispiel ist, der benutzer gibt eine 25 ein, dass entspricht der 00000000000000000000000000011001

er soll nun
a) die möglichkeit haben einen bereich anzugeben (von 10-15. stelle) die bits auf 1 setzen
Code:
for (i=ibereichanf--; i <= ibereichende; i++)
         {
            itemp = itemp << 1;
            itemp = itemp | 1;
         }
         itemp = itemp << ibereichanf;
         istatuswort1 = istatuswort1 | itemp;

b) das gleiche nur auf 0 setzen
Code:
         for (i=ibereichanf--; i<= ibereichende; i++)
         {
            itemp = itemp << 1;
            itemp = itemp | 1;
         }
         itemp = ~itemp;
         itemp = itemp << ibereichanf;
         istatuswort1 = istatuswort1 & itemp;

c) das gleiche nur bits umkippen (1=0;0=1)
Code:
for(i=ibereichanf--; i<=ibereichende; i++)
         {
            itemp = itemp << 1;
            itemp = itemp | 1;
         }
         itemp = itemp << ibereichanf;
         istatuswort1=istatuswort1^itemp;

nun komme ich nicht weiter, dabei habe ich schon die lösung, verstehe es aber nicht :)



ist nun natürlich aus dem zusammenhang gerissen, aber vielleicht kann mir trotzdem jemand helfen, und mir das erklären... oder ich poste noch mal das ganze prog:

Code:
/* Erstellungsdatum: 09.04.05 */

#include<stdio.h>

main(){

   int  istatuswort1=0, istatuswort2=0, itemp=0;
   int  ibereichanf=0, ibereichende=0;
   char cmenuewahl=' ';
   int  iende=0, ianz, i;

printf   ("Programm zur Ausgabe einer Dezimalzahl in Binaerdarstellung.\n" 
          "Zusaetzlich Bitoperationen ausfuerbar!\n");
fflush(stdin);           
printf ("Bitte geben Sie eine ganze Zahl ein\n");

scanf("%d", &istatuswort1);

  do
  {
    printf(" Menue\n"
           "________\n\n\n"
           "a) Statusbits setzen (auf 1)\n"
           "b) Statusbits zuruecksetzen (auf 0 setzen)\n"
           "c) Statusbits umkippen\n"
           "d) Statuswort bitweise ausgeben\n"
           "e) Ende\n\n");

fflush(stdin);
         
   cmenuewahl=getchar();
  
   switch (cmenuewahl)
   {
      case 'a':
         /*Schleife zum Einlesen von dem Startwert des Positionsbereichs*/
         do
         {
            printf("Bitte geben Sie einen Startwert fuer den\n"
                   "Positionsbereich der Statusbits an. Dieser\n"
                   "Wert muss zwischen 1 und %d sein!\n\n",
                   (sizeof(int)*8-1));
                   fflush(stdin);
            ianz=scanf("%d", &ibereichanf);
         }
         while ((ianz==0) || (ibereichanf < 1) || (ibereichanf > sizeof(int)*8-1));  
        
         /*Schleife zum Einlesen von dem Endwert des Positionsbereichs*/
         do
         {
            printf("Bitte geben Sie einen Endwert fuer den\n"
                   "Positionsbereich der Statusbits an. Dieser\n"
                   "Wert muss zwischen %d und %d sein!\n\n",
                   ibereichanf, sizeof (int)*8);
                   fflush(stdin);
            ianz=scanf("%d", &ibereichende);
         }
         while ((ianz==0) || (ibereichende <= ibereichanf) || (ibereichende > sizeof(int)*8));    
         
         /*Statusbits auf 1 setzen*/
         for (i=ibereichanf--; i <= ibereichende; i++)
         {
            itemp = itemp << 1;
            itemp = itemp | 1;
         }
         itemp = itemp << ibereichanf;
         istatuswort1 = istatuswort1 | itemp;
         
         break;
         
      case 'b':
       /*Schleife zum Einlesen von dem Startwert des Positionsbereichs*/
         do
         {
            printf("Bitte geben Sie einen Startwert fuer den\n"
                   "Positionsbereich der Statusbits an. Dieser\n"
                   "Wert muss zwischen 1 und %d sein!\n\n",
                   (sizeof(int)*8-1));
                   fflush(stdin);
            ianz=scanf("%d", &ibereichanf);
         }
         while ((ianz==0) || (ibereichanf < 1) || (ibereichanf > sizeof(int)*8-1));  
        
         /*Schleife zum Einlesen von dem Endwert des Positionsbereichs*/
         do
         {
            printf("Bitte geben Sie einen Endwert fuer den\n"
                   "Positionsbereich der Statusbits an. Dieser\n"
                   "Wert muss zwischen %d und %d sein!\n\n",
                   ibereichanf, sizeof (int)*8);
                   fflush(stdin);
            ianz=scanf("%d", &ibereichende);
         }
         while ((ianz==0) || (ibereichende <= ibereichanf) || (ibereichende > sizeof(int)*8));    
        
         
         /*Statusbits zuruecksetzen /auf Null setzen*/
         for (i=ibereichanf--; i<= ibereichende; i++)
         {
            itemp = itemp << 1;
            itemp = itemp | 1;
         }
         itemp = ~itemp;
         itemp = itemp << ibereichanf;
         istatuswort1 = istatuswort1 & itemp;
         
      case 'c':
 /*Schleife zum Einlesen von dem Startwert des Positionsbereichs*/
         do
         {
            printf("Bitte geben Sie einen Startwert fuer den\n"
                   "Positionsbereich der Statusbits an. Dieser\n"
                   "Wert muss zwischen 1 und %d sein!\n\n",
                   (sizeof(int)*8-1));
                   fflush(stdin);
            ianz=scanf("%d", &ibereichanf);
         }
         while ((ianz==0) || (ibereichanf < 1) || (ibereichanf > sizeof(int)*8-1));  
        
         /*Schleife zum Einlesen von dem Endwert des Positionsbereichs*/
         do
         {
            printf("Bitte geben Sie einen Endwert fuer den\n"
                   "Positionsbereich der Statusbits an. Dieser\n"
                   "Wert muss zwischen %d und %d sein!\n\n",
                   ibereichanf, sizeof (int)*8);
                   fflush(stdin);
            ianz=scanf("%d", &ibereichende);
         }
         while ((ianz==0) || (ibereichende <= ibereichanf) || (ibereichende > sizeof(int)*8));    
        
         /*Statusbits umkippen*/
         for(i=ibereichanf--; i<=ibereichende; i++)
         {
            itemp = itemp << 1;
            itemp = itemp | 1;
         }
         itemp = itemp << ibereichanf;
         istatuswort1=istatuswort1^itemp;
         break;
         
      case 'd':
      
 /*Schleife zum Einlesen von dem Startwert des Positionsbereichs*/
                
         for (i=sizeof(istatuswort1)*8-1;i>=0;i--)
         {
           /*printf("%u, (istatuswort & ((1 << (i+1))-1))>>i);*/
           printf("%n", (istatuswort1>>i)&1);
           
         }
         printf("\n\n");
         break;
         
      case 'e':
         iende=1;
         printf ("Das Programm wird beendet");
         break;
      
      default:
         printf ("Ihre Eingabe war falsch!\n");
       
   }  
  }while (iende!=1);

return 0;
}

tausend dank schon mal...

gruß
andrea
 
naja, ich muss dieses prog erklären können verstehe es aber nicht, und wäre super dankbar, wenn mir jemand diese 3 kleinen code-blöcke erklären könnte...
 
Zurück