Я немного озадачен этим. Я думал, что оператор ~ в 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
Я надеюсь, что кто-то будет иметь некоторое представление об этом.
Это именно то, что должно произойти: когда вы инвертируете двоичное представление нуля, вы получаете отрицательное; когда вы инвертируете двоичное представление единицы, вы получаете отрицательные два в представлении дополнения два.
00000000 --> ~ --> 11111111 // This is -1
00000001 --> ~ --> 11111110 // This is -2
Обратите внимание, что даже если вы начинаете с bool
оператор ~
заставляет значение повышаться до int
по правилам целочисленных акций. Если вам нужно инвертировать bool
к bool
, используйте оператор !
вместо ~
,
~ является побитовым оператором NOT, что означает, что он переворачивает все биты. Для логического НЕ, вы должны использовать! оператор