我通过使用枚举声明新类型DAY然后从day1和day2声明两个变量,然后当我使用它们未初始化时我应该看到0到6之间的值,因为enumlist中的值介于0到6之间,但我收到这些值而不是-858993460.
你能解释一下为什么我会收到这些值而不是0到6吗?
#include<iostream>
using namespace std;
int main()
{
enum DAY{SAT,SUN,MON,TUE,WED,THU,FRI};
DAY day1,day2;
cout<<int(day1)<<endl<<day1<<endl;
cout<<int(day2)<<endl<<day2<<endl;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我已经给出了一个问题,将base从10转换为2 而不使用除法(/)和模块(%),因此我提出了使用按位AND(&)和右移(>>)运算符的解决方案.
所以我开始了解这两个操作员究竟做了什么,但仍然有些问题我无法回答或理解背后的逻辑.
如果我理解正确的除法工作根据数字的位置值,十进制和二进制两者.当我们将数字除以10或2时,我们将位置值在两者中向右移动一个位置,这将导致十进制除以10,二进制除以二.
X = 120(十进制)如果X >> 1我们将X = 12(除以10)
Y = 1000(以2为基数)如果Y >> 1,我们将X = 100(除以2)
但是当我使用这段代码时:
#include<iostream>
using namespace std ;
int main()
{
int a,b=1;
cout <<"enter an integer"<<endl;
cin>> a;
cout<<(a & b)<<endl;
a=a>>1;
cout<<a;
cout<<endl;
system("pause");
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
我感到困惑,因为在我看来它就是这样的
a = 120(以十为基数)如果X >> 1,我们将X = 12(除以10)
但结果就是这样
a = 120(以十为基数)如果X >> 1我们有X = 60(除以2 !!)
我不明白结果的两个要点:
第一:如果这个运算符(>>)只是移动代码中数字的位置值并且不改变数字的基数(10)它应该产生另一个结果(12),而不是我们在代码结果中看到的结果(它是60).为什么我们可以看到这个结果(60)而不是12?
第二:如果它是二进制左移(对我来说似乎这样),它是否首先由IDE将十进制更改为二进制?
关于按位AND,如果它是逻辑门(它似乎是):
1.除了0和1以外,我们如何设置其他值并且钢有答案?
2.按位和规则
Y'1 = Y
然后它应该是120但代码的结果是1.这是什么解释?
3.它可以生成提醒(根据哪些数学运算和逻辑)?