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
b) das gleiche nur auf 0 setzen
c) das gleiche nur bits umkippen (1=0;0=1)
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:
tausend dank schon mal...
gruß
andrea
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