繁体   English   中英

如何在不使用bitset的情况下显示unsigned int中的位?

[英]How do I display the bits in an unsigned int WITHOUT using bitset?

我目前正在研究一个涵盖位操作的学校项目。 我们应该显示无符号整数变量的位,并允许用户操纵它们,打开和关闭它们并移动它们。 除了在操作后显示位,我才能使用所有功能。 我们不允许使用bitset来显示位,这将导致严重的等级降低。

我已经尝试使用if语句来确定这些位是打开还是关闭,但这似乎不起作用。 每当有一点改变时,它只会打印很多0和1。

std::cout << "Bits: ";

for (int i = sizeof(int)*8; i > 0; i--)
{

    if (a | (0 << i) == 1)
        std::cout << 1;
    if (a | (0 << i) == 0)
        std::cout << 0;

}

std::cout << std::endl << a;

我希望如果我开启一点,那一位将显示1而不是0 ,其余的位保持不变并仍然显示0 ; 相反,它打印一个1010101的字符串,大约是控制台一半的长度。

这里有几个问题,您可能想要对位操作进行详细的审查:

  • for (int i = sizeof(int)*8; i > 0; i--)for (int i = sizeof(int)*8 - 1; i >= 0; i--) ,因为位为0 -indexed(向左移动1次,在最右边的位置给出一个设置位)。
  • 我们使用按位AND( & )而不是按位OR( | )来检查是否设置了一个位。 这是因为当我们使用按位AND并且只有一个位设置的数字时,结果将是一个掩码,其中1位的位与原始数字中的相应位处于相同的状态(因为任何东西) AND 1本身),所有其他位为0(因为任何AND 0都是0)。
  • 我们想要一个在我们要检查的位置为1的掩码,在其他地方需要0,所以我们需要1 << i而不是0 << i
  • 如果我们正在检查的位被设置,我们最终会得到一个设置了一位的数字,但不一定是1.所以我们应该检查结果是否不等于0而不是检查它是否等于1 。
  • |相比, ==运算符具有更高的优先级 &运算符,所以需要括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM