Ich habe eine Nibble-Klasse erstellt, die scheinbar funktioniert, aber wenn ich sie mehr als einmal verwende, ist das Ergebnis anders. Der folgende Code sollte die Probleme veranschaulichen.Klasse nicht konsistent
#include <cstdlib>
#include <iostream>
using namespace std;
class nibble{
public:
nibble(){}
nibble(int n){
for (int x=0;x<4;x++){
b[x]=bool(n%2);
//cout<< x<<"b[x]="<<b[x]<<endl;
n/=2;
}
}
nibble(char h){
char* end;
int n = strtol(&h,&end,16);
for (int x=0;x<4;x++){
b[x]=n%2;
n/=2;
}
}
bool bit(int n){
n-=2;// this should only have to be n--
return b[n];
}
void set(int n,bool bl){
n-=2;//this should only have to be n-- but n-- doesn't work.
b[(n)]=bl;
}
string bin(){
string out;
if (b[0]){out+='1';}
else{out+='0';}
if (b[1]){out+='1';}
else{out+='0';}
if (b[2]){out+='1';}
else{out+='0';}
if (b[3]){out+='1';}
else{out+='0';}
out+='b';//cout<<'b'<<endl;;
return out;
}
char hex(){
int out=0;
for (int x=3; x>-1; x--){
out *=2;
out+=b[x];
}
//cout<< "hex() out="<<out<<endl;
switch (out){
case 0:
return '0';
break;
case 1:
return '1';
break;
case 2:
return '2';
break;
case 3:
return '3';
break;
case 4:
return '4';
break;
case 5:
return '5';
break;
case 6:
return '6';
break;
case 7:
return '7';
break;
case 8:
return '8';
break;
case 9:
return '9';
break;
case 10:
return 'A';
break;
case 11:
return 'B';
break;
case 12:
return 'C';
break;
case 13:
return 'D';
break;
case 14:
return 'E';
break;
case 15:
return 'F';
break;
}
}
int val(){
int out=0;
for (int x=3; x>-1; x--){
out *=2;
out+=b[x];
}
return out;
}
private:
bool b[3];
};
/**
nibble operator~(nibble in);
nibble operator|(nibble in1, nibble in2);
nibble operator&(nibble in1, nibble in2);
*/
int main(){
char c;
nibble a(10);
cout<<a.bin()<<" "<<a.hex()<<" "<<a.val()<<endl;
cout<<a.bit(4)<<' '<<a.bit(3)<<' '<<a.bit(2)<<' '<<a.bit(1)<<'b'<<endl;
/*** when this code is inserted, the above code gives a different result. I have no clue why this happens
cin>>c;
nibble b('A');
cout<<b.bin()<<" "<<b.hex()<<" "<<b.val()<<endl;
cout<<b.bit(4)<<' '<<b.bit(3)<<' '<<b.bit(2)<<' '<<b.bit(1)<<'b'<<endl;/*
***/
}
Ich fühle mich wie es etwas wirklich dumm sein muss, aber ich habe auf sie eine Zeit lang gearbeitet, und kann das Problem nicht finden. Danke im Voraus.
Was die Ausgänge sind Sie mit und ohne zusätzlichen Code zu sehen? – Lazarus