首页 > 解决方案 > 为什么 someNumber = rand() & 100 + 1; 不产生错误?

问题描述

我试图在 (1 - 100) 和要运行的代码之间生成一个随机数,但没有做我想要的。我注意到我不小心输入了&,而不是%使用 rand() 函数,编译器没有我一个错误。到底发生了什么?为什么没有产生错误?&返回地址吗?这个错误很难找到,因为它是一个简单的错字,很容易错过。

这是错字:

unsigned int randomNumber = rand() & 100 + 1;

但这就是我要输入的内容:

unsigned int randomNumber = rand() % 100 + 1;

这是使用带有 & 的 rand()的代码,以防您希望运行它:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
    srand(static_cast<unsigned int>(time(nullptr)));
    unsigned int randomNumber;
    char again;

    do
    {
        std::cout << "Do you want to generate a random number? (y/n) ";
        std::cin >> again;
        randomNumber = rand() & 100 + 1;
        std::cout << randomNumber << '\n';
    } while (again == 'y');


    getchar();
    return 0;
}

标签: c++compiler-errorscompiler-warningssrandaddressof

解决方案


这是按位和运算符。它需要两个数字,然后它“和”它们的位。

例如:3 & 102

 0011
&1010
 ----
 0010

推荐阅读