为什么 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。
布尔类型将值强制为真(非零)或假(零),在输出时变为一或零。

您需要按循环计数右移以避免转换为布尔值或使用三元。