Почему someNumber = rand () & 100 + 1;не выдает ошибку? - PullRequest
0 голосов
/ 19 октября 2019

Я пытался сгенерировать случайное число между (1 - 100) и кодом для запуска, но не делал то, что хотел. Я заметил, что случайно набрал & вместо % с функцией rand (), а компилятор NOT выдал ошибку. Что именно происходит? Почему не было сгенерировано ошибок? & возвращает адрес? Эту ошибку было сложно найти, потому что это простая опечатка, которую легко пропустить.

Вот опечатка:

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;
}

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Там нет ошибки, потому что это совершенно законное выражение. Результат вызова к rand() равен поразрядно и ed с результатом 100 + 1.

1 голос
/ 19 октября 2019

Это бит и оператор . Требуется два числа, а затем «и» их биты.

Например: 3 & 10 равно 2.

 0011
&1010
 ----
 0010
...