c++ - 以 long long 数字打印位 (C++)

标签 c++ bit long-long

我想打印一个 long long 数字的所有位。 当我在 main() 中执行时,一切都很好,但在 printBits() 函数(代码相同)中,第 32 位有一个额外的 1。

代码:

#include <iostream>

void printBits(long long number)
{
    std::cout<<number<<" -> ";
    for (char i=63; i>=0; --i)
    {
        std::cout<<(bool)(number&(1<<i));
    }
    std::cout<<std::endl;
}

int main()
{
    long long number=1;

    std::cout<<number<<" -> ";
    for (char i=63; i>=0; --i)
    {
        std::cout<<(bool)(number&(1<<i));
    }
    std::cout<<std::endl;

    printBits(number);

    return 0;
}

结果是:

1 -> 0000000000000000000000000000000000000000000000000000000000000001
1 -> 0000000000000000000000000000000100000000000000000000000000000001

Process returned 0 (0x0)   execution time : 0.012 s
Press any key to continue.

最佳答案

文字 1 默认为整数。将其转换为 long long 即可解决问题。

std::cout<<(bool)(number&(((long long)1)<<i));

关于c++ - 以 long long 数字打印位 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123160/

相关文章:

java - Java 中将位打包到 byte[] 并读回的最有效方法是什么?

c - long long int 算术

c++ - 树状结构中的内存前向预留

c++ - 向量化 (SIMD) 树操作

c++ - 需要帮助在基本 C++ 攻击游戏中实现健康

c++ - 无法在 Visual Studio 2010 中打开包含文件 'stdlib.h'

c++ - 在 n LSBits 之后清除 m 位的掩码

ruby - 循环遍历整数中的位,ruby

c++ - 如何检查 A+B 是否超过 long long? (A和B都是长长的)