C ++ булева алгебра

Я объявил некоторую переменную как Boolean, и я надеялся, что C ++ будет знать, что делать, когда я делаю некоторое логическое добавление, но это происходит не так, как мне бы хотелось. Как мне заставить его работать.

#include<iostream>

using namespace std;

int main()
{
bool x,j;
x=0;
j=1;
for(int i=0;i<10;i++)
{
cout << x;
x=x+j;
}
return 0;
}

Я получаю вывод как

011111111

в то время как я надеялся получить

0101010101

Я надеялся, что булевы переменные изменятся на 2. Так что если

x=1 then
x+1 = 0
x+1+1=1
x+1+1+1=0

и так далее.

Я путаю булеву алгебру с алгеброй base-2?

Спасибо

1

Решение

bool x,j;
x=x+j;

Это утверждение автоматически продвигает x а также j печатать int перед добавлением их. Затем назначение преобразуется обратно в bool обычным способом: 0 становится false, но любой другой номер, включая 2, становится true,

Вы можете получить дополнение Z_2, используя ^ (xor) оператор вместо:

x = x^j;
4

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

C / C ++ предоставляет ряд побитовых операторов: &, |, ^, ~, которые обычно работают на логических значениях, потому что true преобразуется в целое число 1 и false в 0.

Но вы также можете использовать настоящие логические операторы:

  • && конъюнкция
  • || дизъюнкция
  • != эксклюзив или (что вы считаете дополнением)
  • ! не
1