gpt4 book ai didi

c++ - 类不一致

转载 作者:行者123 更新时间:2023-11-28 08:24:15 25 4
gpt4 key购买 nike

我制作了一个似乎有效的 nibble 类,但是当我多次使用它时,结果就不同了。下面的代码应该可以说明问题。

#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;/*
***/
}

我觉得这一定很愚蠢,但我已经研究了一段时间,但找不到问题所在。提前致谢。

最佳答案

进行以下更改:

    bool bit(int n){
return b[n-1];
}

void set(int n,bool bl ){
b[n-1]=bl;
}

最后(你怎么错过了这个?)

private:
bool b[4]; //you had b[3]

关于c++ - 类不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com