为什么 bool 显示正确的位顺序,而直接输出移位运算结果却不显示?

Why bool shows the correct bit order while outputting the shift operation result directly doesn't?

本文关键字:显示 运算 输出 结果 bool 顺序 为什么      更新时间:2023-10-16

我正在做一个任务,要求我以二进制形式表示一个数字。我确实知道基本的想法,所以我实现了这样的东西。

#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

谁能告诉我第一个代码有什么问题?

考虑一下这个数字代表什么。

6 = 110
4 = 100
2 = 010

您正确地屏蔽了每个位,但这些操作的结果是整数。当您输出它们时,它将打印 2 的幂,而不是 1 和 0。
布尔类型强制将值强制为 true(非零(或 false(零(,在输出时变为 1 或 0。

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