_fux_
0
hi leute,
ich versuche momentan mit bitweisen operatoren klar zu kommen. das klappt auch soweit, jedoch lt. dieser definition: http://de.wikipedia.org/wiki/Bitweiser_Operator
is dann folgendes enstanden:
nun, das problem ist, das er auch flags erkennt eigntlich gar nicht die nicht gesetzt sind - bei einigen funktioniert es korrekt.
meine frage wäre nun, wie ich denn eine bessere flagprüfungen machen kann, falles es sowas überhaupt gibt ;D
(wichtig wäre mir auch, das mit den | und & zu behalten, ansonsten wüsste ich auch andere möglichkeiten) ^^
achso, mir ist auch bewusst warum der die falschen flags erkennt, aber es muss doch eine möglichkeit geben?
LÖSUNG
ich sitz ja nich faul rum und warte bis jemand was sagt:
so finde ich immer die korrekten flags: (ich überspringe in der for-schleifen auch offensichtlich falsche flags):
ich versuche momentan mit bitweisen operatoren klar zu kommen. das klappt auch soweit, jedoch lt. dieser definition: http://de.wikipedia.org/wiki/Bitweiser_Operator
is dann folgendes enstanden:
Code:
#include <iostream>
using namespace std;
int main(){
int flag[4]={1,4,5,8};
int setFlag;
int checkFlag;
setFlag = flag[0] | flag[3]; // gesetzte flags sind 1 und 8
for(int i=1;i<10;i++){
checkFlag = setFlag & i; // prueft ob flag setzt (i muss checkFlag ergeben)
if(i == checkFlag) cout << "Flag " << i << " gesetzt.\n";
}
return 0;
}
nun, das problem ist, das er auch flags erkennt eigntlich gar nicht die nicht gesetzt sind - bei einigen funktioniert es korrekt.
meine frage wäre nun, wie ich denn eine bessere flagprüfungen machen kann, falles es sowas überhaupt gibt ;D
(wichtig wäre mir auch, das mit den | und & zu behalten, ansonsten wüsste ich auch andere möglichkeiten) ^^
achso, mir ist auch bewusst warum der die falschen flags erkennt, aber es muss doch eine möglichkeit geben?
LÖSUNG
ich sitz ja nich faul rum und warte bis jemand was sagt:
so finde ich immer die korrekten flags: (ich überspringe in der for-schleifen auch offensichtlich falsche flags):
Code:
#include <iostream>
using namespace std;
int main(){
int flag[10]={2,4,8,16,32,64,128,256,512,1024};
int setFlag;
int checkFlag;
setFlag = flag[2] | flag[7];
for(int i=1;i<=1024;i=i*2){
checkFlag = setFlag & i; // prueft ob flag setzt (i muss checkFlag ergeben)
if(i == checkFlag) cout << "Flag " << i << " gesetzt.\n";
}
return 0;
}