C/C++

Что делает ^2 (или вообще ^) в C++? У меня на выводе он то прибавляет, то вычитает 2(+скрин).

Исключающее "или" по очереди сравнивает все биты, если на какой-то позиции оба 0 или оба 1 → оставляет 0, Если один из них 1, а другой 0 → записывает 1. Соответственно:

десятичное 2 в двоичном будет 10
десятичное 12 в двоичном: 1100

1100 ^ 0010 → 1110 → 14

Десятичное 34 → 100010

100010 ^
000010

100000 → 32

Ну т. е. если в двоичном представлении исходного числа на второй позиции считая справа, стоит `0` — оно добавит двойку. А если там уже `1` — вычтет.
___________

P.s. получается такая картина:

00 → 0000 // +2
01 → 0001 // +2
02 → 0010 // -2
03 → 0011 // -2
04 → 0100 // +2
05 → 0101 // +2
06 → 0110 // -2
07 → 0111 // -2
08 → 1000 // +2
09 → 1001 // +2
10 → 1010 // -2
11 → 1011 // -2
12 → 1100 // +2
13 → 1101 // +2
14 → 1110 // -2
15 → 1111 // -2

P.p.s. Только что обнаружил, вместо if ( x == 2 ) можно написать if ( !(x^2) ) и делать вид, что ты хацкер)
BK
B Krav
62 360
Лучший ответ
Операции с двоичными разрядами
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Егор Щербань
Егор Щербань
66 169
Ерлан Базарбаев С помощью Исключающего ИЛИ можно даже переключать регистр символа, хранящегося в переменной (но только для ограниченных групп символов, например, для латинских букв).
логическое ИЛИ (побитовое)
Черный Рыцарь
Черный Рыцарь
27 730
Фриц Моисеевич Морген ^ оно само в с++ обозначение как "СТЕПЕНЬ"
Владимир Летуновский А почему с числами такие операции происходят? Потому что он сделан только для bool и глючит с int?
Фриц Моисеевич Морген 0^ оно не может сразу отнимать и прибавлять