定义了一个枚举变量,
enum hyperthread {Support,Unsupport};
只有支持和不支持两种值,按照枚举元素的默认值,应该分别是0和1,但是在类中指定位域大小时,给一个二进制位是错误的,运行中只能输出Support的结果,Unsupport是不正确的,想知道为什么至少要给两个二进制位,是还有存储的其他信息吗?求解
【word_lenth也一样,cores_number三个也需要给三位二进制,给两位不能表示第三个变量,代码是教材课后题,定义的一个CPU的类。】
代码:
#include<iostream>
using namespace std;
enum word_lenth{_32,_64};
enum cores_number{One,Two,Four};
enum hyperthread {Support,Unsupport};
class My_cpu{
public:
My_cpu(unsigned Number,word_lenth Word,cores_number Core,hyperthread Hyperthread):
Number(Number),Word(Word),Core(Core),Hyperthread(Hyperthread){}
~My_cpu(){}
void Cpu_Show();
private:
unsigned Number : 12;
word_lenth Word : 2; //此处改1是不正确的,为什么?
cores_number Core : 3;//此处改2是不正确的,为什么?
hyperthread Hyperthread : 2;//此处改1是不正确的,为什么?
};
void My_cpu::Cpu_Show(){
cout<<"时钟频率:"<<Number<<endl;
switch (Word)
{
case _32:
cout<<"字长:32"<<endl;
break;
case _64:
cout<<"字长:64"<<endl;
break;
}
switch (Core)
{
case One:
cout<<"核心数:单核"<<endl;
break;
case Two:
cout<<"核心数:双核"<<endl;
break;
case Four:
cout<<"核心数:四核"<<endl;
break;
}
switch (Hyperthread)
{
case Support:
cout<<"是否支持超线程:是"<<endl;
break;
case Unsupport:
cout<<"是否支持超线程:否"<<endl;
break;
default:
break;
}
}
void main(){
My_cpu Inter_7(2999,_64,Four,Unsupport);
cout<<"sizeof(cpu):"<<sizeof(Inter_7)<<endl<<endl;;
Inter_7.Cpu_Show();
cout<<endl;
}
截图:
CPU字长改为了32位,两种都能正确输出。
这是位域定义多一位的情况:
这是恰好满足定义的情况: