оператор тильды, возвращающий -1, -2 вместо 0, 1 соответственно

Я немного озадачен этим. Я думал, что оператор ~ в C ++ должен был работать по-другому (не так Matlab-y). Вот минимальный рабочий пример:

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
bool banana = true;
bool peach = false;
cout << banana << ~banana << endl;
cout << peach << ~peach << endl;
}

И вот мой вывод:

1-2
0-1

Я надеюсь, что кто-то будет иметь некоторое представление об этом.

5

Решение

Это именно то, что должно произойти: когда вы инвертируете двоичное представление нуля, вы получаете отрицательное; когда вы инвертируете двоичное представление единицы, вы получаете отрицательные два в представлении дополнения два.

00000000 --> ~ --> 11111111 // This is -1
00000001 --> ~ --> 11111110 // This is -2

Обратите внимание, что даже если вы начинаете с boolоператор ~ заставляет значение повышаться до int по правилам целочисленных акций. Если вам нужно инвертировать bool к bool, используйте оператор ! вместо ~,

7

Другие решения

~ является побитовым оператором NOT, что означает, что он переворачивает все биты. Для логического НЕ, вы должны использовать! оператор

0

По вопросам рекламы [email protected]