为什么 bool 显示的是正确的位序,而直接输出移位运算结果却不正确?
Why bool shows the correct bit order while outputting the shift operation result directly doesn't?
我正在做一个任务,要求我以二进制形式表示一个数字。
我确实知道基本的想法,所以我实现了这样的东西。
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int main()
{
int n;
cin>>n;
for(int i=31;i>=0;i--){
cout<<(n&(1<<i));
}
return 0;
}
对于 n=6.
,输出是 00000000000000000000000000000420
但是我将我的代码更改为
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int main()
{
int n;
cin>>n;
for(int i=31;i>=0;i--){
bool a=(n&(1<<i));
cout<<a;
}
return 0;
}
对于 n=6.
,00000000000000000000000000000110 全部 good.Gave 输出
有人能告诉我第一个代码有什么问题吗?
想想这个数字代表什么。
6 = 110
4 = 100
2 = 010
您正确地屏蔽了每一位,但这些操作的结果是整数。当你输出它们时,它会打印 2 的幂而不是 1 和 0。
布尔类型将值强制为真(非零)或假(零),在输出时变为一或零。
您需要按循环计数右移以避免转换为布尔值或使用三元。
我正在做一个任务,要求我以二进制形式表示一个数字。 我确实知道基本的想法,所以我实现了这样的东西。
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int main()
{
int n;
cin>>n;
for(int i=31;i>=0;i--){
cout<<(n&(1<<i));
}
return 0;
}
对于 n=6.
,输出是 00000000000000000000000000000420但是我将我的代码更改为
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int main()
{
int n;
cin>>n;
for(int i=31;i>=0;i--){
bool a=(n&(1<<i));
cout<<a;
}
return 0;
}
对于 n=6.
,00000000000000000000000000000110 全部 good.Gave 输出有人能告诉我第一个代码有什么问题吗?
想想这个数字代表什么。
6 = 110
4 = 100
2 = 010
您正确地屏蔽了每一位,但这些操作的结果是整数。当你输出它们时,它会打印 2 的幂而不是 1 和 0。
布尔类型将值强制为真(非零)或假(零),在输出时变为一或零。
您需要按循环计数右移以避免转换为布尔值或使用三元。