Я объявил некоторую переменную как 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?
Спасибо
bool x,j;
x=x+j;
Это утверждение автоматически продвигает x
а также j
печатать int
перед добавлением их. Затем назначение преобразуется обратно в bool
обычным способом: 0
становится false
, но любой другой номер, включая 2, становится true
,
Вы можете получить дополнение Z_2, используя ^
(xor) оператор вместо:
x = x^j;
C / C ++ предоставляет ряд побитовых операторов: &
, |
, ^
, ~
, которые обычно работают на логических значениях, потому что true преобразуется в целое число 1 и false в 0.
Но вы также можете использовать настоящие логические операторы:
&&
конъюнкция||
дизъюнкция!=
эксклюзив или (что вы считаете дополнением)!
не